文档详情

51系列串口通讯例程.doc

发布:2017-12-19约2.07万字共16页下载文档
文本预览下载声明
51系列串口通讯例程.rar serial.c, //?题目:串口初始化C代码? ?? //?要求:? ?? //?1.波特率1200bps,无奇偶校验,停止位1,数据位8? ?? //?2.定时器T1做波特率发生器? ????? //?软件模拟测试说明:? ?? //?1.这个测试采用查询方式进行串口通讯? ?? //?2.将软件仿真环境的晶震设为11.0592?MHz? ?? //?3.软件模拟全速运行,?观察波特率是1200bps? ?? //?4.在串口1中输入数字或字母,可观察到通讯是否有误。? ?????? //#pragma?src? ????? #include?REG51.H? ????? //串口初始化? ?? void?serial_init(void)??? {??? ???//ET1??=?0;?????//CLR???0ABH??????;禁止T1中断? ?? ???TMOD?=?0x20;??//MOV???89H,#20H??;timer?1?mode?2:?8-Bit?reload(定时器T1?模式2:?8位自动初值重装)? ?? ???TH1??=?0xE8;??//MOV???8DH,#0E8H? ?? ???TL1??=?0xE8;??//MOV???8BH,#0E8H?;1200bps,?11.059? ?? ???TR1??=?1;?????//SETB??8EH???????;启动定时器1? ?? ???SCON?=?0x50;??//?mode?1:?10-bit?UART,?enable?receiver(模式1:?10位异步发送/接收,?使能接收允许位) ???//SM1??=?1;?????//?????? ??????;串行口?模式1? ?? ???//SM0??=?0;? ?? ???//REN??=?1;?????//????????????????;允许串行中断接收? ? ???SM2??=?1;?????//SETB??O9DH??????;收到有效的停止位时才将RI置1? ???ES???=?1;?????//SETB??0ACH??????;允许串行中断?? ?? ???EA???=?1;?????//SETB??0AFH??????;总中断开? ?? }??? //中断方式处理串口数据? ?? void?serial(void)?interrupt?4?using?1??? {??? ????if(RI)??? ????{??? ???????//?RI?=?0;? ?? ??????//?串口接收,?采用临时缓冲? ?? ????}??? #if?0? ?? ???if(TI)??? ???{??? ??????//?TI?=?0;? ?? ??????//?串口发送,?没有必要使用中断方式? ?? ???}??? #endif? ?? }??? //?查询方式接收串口数据? ?? unsigned?char?getchar(void)??? {??? ???while(!RI);//?没有收到串口数据则一直等待? ?? ???RI=0;??? ???return?SBUF;??? }??? //?查询方式发送串口数据? ?? void?putchar(unsigned?char?ch)??? {??? ???SBUF=ch;??? ???while(!TI);??? ???TI=0;??? }??? code?unsigned?char?HEX_TAB?[]=0123456789ABCDEF;??? void?puthex(unsigned?char?ch)??? {??? ???unsigned?char?i,j;??? ???i=ch4;??? ???j=ch0x0f;??? ???putchar(HEX_TAB[i]);??? ???putchar(HEX_TAB[j]);??? }??? 51系列串口通讯例程.rar test.c //?采用查询方式进行串口通讯的例子? ?? //?采用这种方式的弊端:?? ?? //?1.如果对方没有发送数据,则本机无限等待,而不能做其它事情? ?? //?2.如果对方发送数据而本机正做其它事情,那么有可能丢失数据。? //?因此实际上串口接收常采用中断方式,串口发送则不需要。? ?? #include?REG51.H? ?? extern?void?serial_init(void);??? extern?unsigned?char?getchar(void);??? extern?void?putchar(unsigned?char?ch);??? extern?void?puthex(unsign
显示全部
相似文档