完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近调试GPS的一个模块,需要把数据从GPS读取,再通过串口发送给PC机等一些功能。要用到2个串口,我使用了AMTEGA8A单片机,所以用普通IO模拟做了一个串口。花了我两个晚上的时间,才调试好模拟串口程序,也遇到不少的问题,今天终于搞定了。但是还只是波特率1200,校验位N 数据8 停止1 ,以后再慢慢完善。
模拟串口主要是先要考虑到波特率和数据格式。我采用的1200的波特率,所以一个位的时间是:1s/1200=833.3333333us .这里我没用定时器,我是用延时来实现定时的,一个位的延时时间定为833us,AVR里面的延时程序还是比较精确的,我用示波器观察波形,也是正确的。一般串口协议(校验位N 数据8 停止1 )以我现在调试这个来说,比较简单,一个起始位,8位数据,一个停止位,每一位时间都是833us 以下是我调试的电路板子: 源程序: /*******************ATMEGA8A_GPS****************************************/ /*****File Function : I/O模拟串口调试 *****/ /*****Program Author : ZhengWen(ClimberWin) *****/ /*****MCU : ATMEGA8A 内部4M RC/外部4M 晶振 *****/ /*****Compile Date : 2010/10/19 *****/ /*****Edition Info : V1.0 *****/ /****************************************************************************/ //按键LED显示测试OK //修改时间:2010.10.20 //编写模拟串口程序 define:PC3=RXD PC2=TXD //串口发送OK,波特率设置为1200 校验位N 数据8 停止1 //修改时间:2010.10.21 //串口接收数据OK,+1后 返回发送给电脑 #include #include //延时程序 #define uchar unsigned char #define uint unsigned int //引脚定义 #define IO_RXD 3 //PC3 模拟RXD #define IO_TXD 2 //PC2 模拟TXD #define LED1 4 //PD4 LED1 #define LED2 3 //PD3 LED2 #define KEY1 0 //PB0 按键1 #define KEY2 1 //PB1 按键2 /*位移宏定义*/ #define Set_Bit(val, bitn) (val |=(1>=1; _delay_us(833); i++; Set_Bit(PORTD,LED1); } Set_Bit(PORTC,IO_TXD);//发送STOP信号 _delay_us(833); } ///////////////////////模拟串口接收程序////////////////// uchar IO_UART_Receive(void) //波特率1200 { uchar i; uchar Recieve_SBUF=0x00; i=0x00; while(Get_Bit(PINC,IO_RXD)); _delay_us(833); while(i>=1; if(Get_Bit(PINC,IO_RXD)) {Recieve_SBUF|=0x80;} i++; _delay_us(833); Set_Bit(PORTD,LED2); } while(!Get_Bit(PINC,IO_RXD)); return Recieve_SBUF; } //////////////////主程序/////////////////////// int main() { uchar i; _delay_ms(100); //开机延时 IO_int(); //IO初始化配置 _delay_ms(100);//开机延时 IO_UART_Sent(0x55); //发送0x55测试 while(1) { i=IO_UART_Receive(); _delay_ms(20); IO_UART_Sent(0xaa); _delay_ms(20); IO_UART_Sent(i+1); //如果接收到串口数据后 ,+1 发送回给PC机 } }[/td] |
|
|
|
只有小组成员才能发言,加入小组>>
651 浏览 0 评论
1081 浏览 1 评论
2451 浏览 5 评论
2776 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2612 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
634浏览 9评论
630浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
760浏览 6评论
606浏览 5评论
650浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 16:15 , Processed in 1.097908 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号