义隆单片机编程时应注意的几点
EM78系列单片机--异步串行通信设计
图5.8 RS232的发送和接收流程
程序清单如下:
;定义
STATUS EQU 3
P5 EQU 5
P6 EQU 0X06
BUFFER EQU 0X11
COUNT EQU 0X12
BITNUM EQU 8 ;每字节数据为8位
ORG 0
JMP MAIN
;主程序
MAIN: MOV A,@0X40 ;置P6.5为输出口,P6.6为输入口
IOW P6
CLR BYTE
MOV A,@BITNUM
MOV COUNT,A ;传送数据为每字节8位
;以下为接收
TEST: JBC P6,6 ;检测是否收到起始位
JMP TEST ;未测到
CALL DELAY ;测到起始位,下面准备接收
CALL DELAY ;延时
START: JBC P6,6
BS BYTE,7 ;收到高电平
JBS P6,6
BC BYTE,7 ;收到低电平
DJZ COUNT
JMP L1 ;一个字节未收完,继续收下一位
CALL DELAY
JMP TRANSMIT ;一个字节收完,准备发送
L1: RRC BYTE
CALL DELAY
JMP START
;以下为发送
TRANSMIT:
MOV A,@BITNUM
MOV COUNT,A
BEGIN: BC P6,5 ;发送起始位
CALL DELAY1 ;延时
L2: RRC BYTE ;发送一位数据
JBC STATUS,C
BS P6,5
JBS STATUS,C
BC P6,5
CALL DELAY1 ;延时
DJZ COUNT ;一个字节发送完否?
JMP L2 ;否,继续发送下一位
BS P6,5 ;是
CALL DELAY1
JMP TEST ;继续循环
;延时子程序
DELAY: MOV A,@23
MOV BUFFER,A
LOOP: DJZ BUFFER
JMP LOOP
RET
DELAY1: MOV A,@30
MOV BUFFER,A
LOOP1: DJZ BUFFER
JMP LOOP1
RET
EM78系列单片机--延迟子程序的编写
LP_CNT0 == 0X20 ;定义。
LP_CNT1 == 0X21
MOV A, @2 ;A = 2。
MOV LP_CNT0, A ;设定延迟寄存器0(LP_CNT0)=2
CALL P0_DLY ;呼叫时间延迟子程序。
P0_DLY:
NOP ;调节延迟时间。
MOV A, @200 ;设定 A = 200。
MOV LP_CNT1, A ;设定寄存器LP_CNT1 = 200。
P0_LP:
NOP ;调节延迟时间。
NOP ;调节延迟时间。
NOP ;调节延迟时间。
DJZ LP_CNT1 ;递減LP_CNT1,为0就跳过下一行
JMP P0_LP ;循环。
DJZ LP_CNT0 ;递減LP_CNT0,为0就跳过下一行