下面这个是我的串口程序,我是参考一本书编写的,下载到aduc841的板子里面去,想用来显示十进制数据4567,但是从串口调试程序里面观察到的始终不对,请大家帮我看看问题可能出在哪里,我是单片机新手,问的问题可能比较简单,不要见笑啊。 /******************************************************************************* * 描述: * * 把从UART串口接收到的一个字节数据,发送给串口。UART接收采用中断方式 * * UART以查询方式发送。波特率设置为9600bit/s * ******************************************************************************/ #include <aduc841.H> #include<stdio.h> #include<ctype.h> #include<stdlib.h> #define uchar unsigned char #define uint unsigned int
void ini_uart(void) { IE=0X00; TCON=0X05; SCON = 0x50; /*串口方式1,允许接受,01010000*/ RCLK = 1; /*定时器2,波特率方式 */ TCLK = 1; /*定时器初值65525*/ RCAP2H = 0xff; /*20MHz,Baud Rate 9600 */ RCAP2L = 0xf5; TI = 0; RI = 0; TR2 = 1; } void send_byte(char src_byte) { SBUF=src_byte; while(TI==0); TI=0; } /*把数据转换成ASCII码并传送*/ void decode(char src_niddle) { if(src_niddle<0X0A) send_byte(src_niddle+0X30); else send_byte(src_niddle+0X41-0X0A); } /*分离出数据中的一个字节,将其转换成ASCII码并传送*/ void send_bin_byte(char src_byte) { decode((src_byte>>4)&0X0F); decode(src_byte&0X0F); } /*将二进制整数转换成十进制整数并传送*/ void send_dec_int(unsigned int src_wrd) { unsigned char a,b,c,d,e,f; a=src_wrd/1000; b=(src_wrd%1000)/100; c=(src_wrd%100)/10; d=src_wrd%10; e=16*a+b; f=16*c+d; if(a==0) { send_byte(0X20); if(b==0) { send_byte(0X20); if(c==0) { send_byte(0X20); decode(d); } else send_bin_byte(f); } else { decode(b); send_bin_byte(f); } } else { send_bin_byte(e); send_bin_byte(f); } } void main(void) { ini_uart(); for(;;) { send_dec_int(4567); } }
|