下面這個是我的串口程序,我是參考一本書編寫的,下載到aduc841的板子里面去,想用來顯示十進制數(shù)據(jù)4567,但是從串口調(diào)試程序里面觀察到的始終不對,請大家?guī)臀铱纯磫栴}可能出在哪里,我是單片機新手,問的問題可能比較簡單,不要見笑啊。 /******************************************************************************* * 描述: * * 把從UART串口接收到的一個字節(jié)數(shù)據(jù),發(fā)送給串口。UART接收采用中斷方式 * * UART以查詢方式發(fā)送。波特率設(shè)置為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; } /*把數(shù)據(jù)轉(zhuǎn)換成ASCII碼并傳送*/ void decode(char src_niddle) { if(src_niddle<0X0A) send_byte(src_niddle+0X30); else send_byte(src_niddle+0X41-0X0A); } /*分離出數(shù)據(jù)中的一個字節(jié),將其轉(zhuǎn)換成ASCII碼并傳送*/ void send_bin_byte(char src_byte) { decode((src_byte>>4)&0X0F); decode(src_byte&0X0F); } /*將二進制整數(shù)轉(zhuǎn)換成十進制整數(shù)并傳送*/ 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); } }
|