下面這個是我的串口程序,我是參考一本書編寫的,下載到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); } }
|