來源:網(wǎng)上轉(zhuǎn)載 作者: 在另外一套程序中并沒有ISP功能,要實現(xiàn)程序的更新功能,要了解芯片的IAP調(diào)用,這一點在芯片的資料上也有介紹,然后就是接收上位機的程序,一般是通過串口,下面介紹一下P89C51RD2的串口自動波特率設(shè)置,程序源碼主要摘錄于《單片機與嵌入式系統(tǒng)》,現(xiàn)在貼出完整的源碼: ;============================== ;初始化串口,自適應(yīng)波特率;上位機 ;發(fā)送兩個字符'U',如果接收到一個 ;字符'U',那么初始化成功 ;============================== SERIAL_INIT: MOV TMOD,#02H ;T1工作模式2,定時器 MOV T2CON,#30H ;T2工作為串行口波特率發(fā)生器 CLR A MOV TL2,A MOV TH2,A ;TH2=0000H JNB P3.0,$ ;若P3.0=0 則等待直到其變?yōu)? JB P3.0,$ ;若P3.0=1 則等待直到下降沿到來 SETB TR2 ;啟動T2定時器 JNB P3.0,$ ;若P3.0=0 則等待直到上升沿到來 CLR TR2 ;計算波特率 MOV A,TL2 SWAP A ANL A,#0FH ;取TL2高四位 MOV R0,A MOV A,TH2 SWAP A ANL A,#0F0H ;取TH2低四位 ORL A,R0 MOV R0,A ;組合后送入R0 MOV A,TH2 SWAP A ANL A,#0FH ;取TH2高四位 MOV R1,A MOV A,R0 ;以上程序?qū)崿F(xiàn)T2中數(shù)據(jù)除以16送R1和R0保存 CPL A ;低位取反 MOV TL2,A MOV RCAP2L,A MOV A,R1 CPL A ;高位取反 MOV TH2,A MOV RCAP2H,A ;校驗波特率 SETB TR2 MOV SCON,#52H ;串行口方式1,TI=1 RREV0: ACALL REV_SEND0 ;接收一個字符"U" CJNE A,#55H,RREV0 ;判斷A="U"? RET ;如果收到字符"U",則串口初始化完成 ;============================== ;接收一個數(shù)據(jù)并返回給上位機 ;============================== REV_SEND0: JNB RI, $ CLR RI MOV A,SBUF ;接收數(shù)據(jù) JNB TI,$ CLR TI MOV SBUF,A ;發(fā)送數(shù)據(jù) RET |