void init_serialcomm(void) { SCON = 0xF0; //;;串口工作方式选择d7,d6,d5,d4,d3,d2,d1,d0 sm0 sm1 sm2 ren tb8 rb8 ti ri 0xf0h;;; 1 1 1 1 0 0 0 0 & 工作在串口方式3,11位,1启,8数,1校验,1停
TMOD |= 0x20; //d7 d6 d5 d4 d3 d2 d1 d0 gate1 c/t1 m1 m0 gate0 c/t0 m1 m0 定时器1 定时器0 0x20h;0 0 1 0 0 0 0 0 &定时器1工作在方式2,8位自动加载 &定时器0工作在方式0,13位定时方式 PCON |= 0x80; //d7,d6,d5,d4,d3,d2,d1,d0 smod - - - X X pd idle 0x80h= 1 0 0 0 ,0 0 0 0 波物率乘2 // TH1 = 0xFA; //Baud:4800 fosc=11.0592MHz TH1 = 0xFD; TL1 = 0xFD; th1定时器的初值赋给,在这是指定波特率
256-( 11.0592*10^6/384/波特率)=th1 256-(11059200/384/波特率)=th1 256-(28800/波特率)=th1 1)若想得到4800;;256-(28800/4800)=th1 256-6=250=th1;;0xfah 2)若想得到9600;;256-(28800/9600)=th1 256-3=253=th1;;0xfdh ;;这个值不包括smod*2
IE |= 0x90; //d7 d6 d5 d4 d3 d2 d1 d0 ea - - es et1 ex1 et0 ex0 0x90h;; 1 0 0 1 0 0 0 0 &允计总中断,充许串口中断
TR1 = 1; // timer 1 run scon;d7 d6 d5 d4 d3 d2 d1 d0 tf1 tr1 tf0 tr0 ie1 it1 ie0 it0 tr1=1;setb tr1;; x 1 x x x x x x
;; ip:d7 d6 d5 d4 d3 d2 d1 d0 - - - ps pt1 px1 pt0 px0 ;; PS = 1; 允计串口中断优先 PT0 = 0; PT2 = 0; PT0 = 0; PX0 = 0; PX1 = 0; PT1 = 0; EX0 = 0;; ES = 1; }
|