完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
额。。最近在搞AVR的串口通讯,遇到一点麻烦,求高手啊。。求高手。。
我写的程序很简单,接受部分是采用中断方式,首先PC机发送一个字符给单片机,然后单片机把接收到的数据回发给PC机。 我是在Protues仿真的,把程序下载进ATMEGA16单片机,调好单片机为内部8兆,设置好波特率为19200,设置为COM1口(我已经事先虚拟出COM1和COM2口了),8位数据位,1位停止位,无奇偶校验位(这些都和程序设置一样的),然后使串口小助手也设置好相同的配置。我试着发送一个字符a或者一个数字,都显示乱码。。求助。。求助。。 这是C程序: #include #include #define uchar unsigned char #define uint unsigned int #define mclk 8000000 #pragma interrupt_handler uart_rxc:12 uchar rdata; uint flag=0; //中断标志位 void delay_ms(uint ms) { uint i,j; for(i=0;i for(j=0;j<1141;j++); } } void uart0_init(uchar baud) { UCSRB=0x00; UCSRA=0x00; //控制寄存器清零 UCSRC=(1< baud=mclk/16/baud-1; UBRRL=baud; UBRRH=baud>>8; //波特率的设置 UCSRB=(1< DDRD=0X02; } void uart_sendB(uchar data) { while(!(UCSRA&(BIT(UDRE))));//判断UDRE数据器是否为空 UDR=data; while(!(UCSRA&(BIT(TXC)))); //判断是否发送结束 UCSRA|=BIT(TXC); } void uart_rxc() { UCSRB&=~BIT(RXCIE); //关闭接收中断 rdata=UDR; flag=1; UCSRB|=BIT(RXCIE); //开启接收中断 } void main(void) { uart0_init(19200); while(1) { if(flag) { uart_sendB(rdata); flag=0; } } } 然后是Protues :
|
|
相关推荐
8 个讨论
|
|
显示的是什么
|
|
|
|
|
|
我看了线连错了,TX接RX
|
|
|
|
|
|
buhidaobuzidaobusidhiwoefu
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5130 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7772 浏览 0 评论
3033 浏览 2 评论
3107 浏览 1 评论
10061 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 01:58 , Processed in 0.795531 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号