单片机与PC机串行通讯之VB篇(2)Ryan 发表于 2005-6-7 14:38:16 下面是单片机里面的汇编程序: ORG 0000H AJMP MAIN ORG 0023H ;串行中断入口地址 JMP COM_INT ;串行中断服务程序 ;*********** 主程序开始 ******************* ORG 0030H MAIN: MOV SP,#30H ;设置堆栈 CALL REST ;初始化 CALL COMM ;串口初始化 JMP $ ;原地等待 ; ************* 初始化 ********************* REST: MOV P0,#0FFH ;禁止数码管显示 MOV P2,#255 RET ;返回 ; ************** 串口初始化 *****************;设置串行口工作方式1,定时器1作为波特率发生器;波特率设置为 4800 ; COMM: MOV TMOD,#20H ;设置定时器t1工作方式2 MOV TL1,#0F4H ;定时器计数初值,波特率 2400 MOV TH1,#0F4H ;定时器重装值 SETB EA ;允许总的中断 SETB ES ;允许串行中断 MOV PCON,#80H ;波特率倍增 MOV SCON,#50H ;设置串口工作方式1,ren = 1 允许接收 SETB TR1 ;定时器开始工作 RET ;返回;*************** 串口中断服务程序 ***********; 如果接收 "A" 表示上位机需要联机信号,单片机发送 "Y"作为; 应答信号,如果接收到 数字 1~ N,表示相应的功能;; 这里,如果收到 1 ,则单片机向计算机发送字符 'A';; 如果收到 2 ,则单片机向计算机发送字符 'B';; 如果收到其他的数据,则发送 'C';COM_INT: CLR ES ;禁止串行中断 CLR RI ;清除接收标志位 MOV A,SBUF ;从缓冲区取出数据 MOV P1,A MOV DPTR,#TAB CJNE A,#041H,IN_1 ;检查数据 MOV SBUF,#59H ;收到联机信号"A",发送联机信号"Y" JNB TI,$ ;等待发送完毕 CLR TI ;清除发送标志 SETB ES ;允许串行中断 RETI ;中断返回IN_1: JNE A,#01h, IN_2 ;如果收到1 MOVC A,@A+DPTR MOV SBUF,A ;发送 'A' JNB TI,$ ;等待发送完毕 CLR TI ;清除发送中断标志 SETB ES ;允许串行中断 RETI ;中断返回IN_2: CJNE A,#02,IN_3 ;接收到 2 MOVC A,@A+DPTR MOV SBUF,A ;发送 'B' JNB TI,$ ;等待发送完毕 CLR TI ;清除发送中断 SETB ES ;允许串行中断 RETI ;中断返回IN_3: MOV A,#03H MOVC A,@A+DPTR MOV SBUF,A ;发送 'C' JNB TI,$ ;等待发送完毕 CLR TI ;清除发送中断标志 SETB ES ;允许串行中断 RETI ;返回;查表数据区TAB: DB 'X','A','B','C' END

评论