📄 feedis_uart.s
字号:
.module feedis_uart.c
.area vector(rom, abs)
.org 72
jmp _UART_RX_interrupt
.org 4
jmp _int0_isr
.area data(ram, con, rel)
_FLAG::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.dbsym e FLAG _FLAG c
_ready_rx::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.dbsym e ready_rx _ready_rx c
_zx::
.blkb 1
.area idata
.byte 56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.blkb 2
.area idata
.byte 56,56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.blkb 2
.area idata
.byte 56,56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.blkb 2
.area idata
.byte 56,56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.blkb 2
.area idata
.byte 56,56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.blkb 2
.area idata
.byte 56,56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.blkb 2
.area idata
.byte 56,56
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.dbstruct 0 13 .1
.dbfield 0 zhou c
.dbfield 1 dunwei A[4:4]c
.dbfield 5 zongzhong A[4:4]c
.dbfield 9 chaoxian A[4:4]c
.dbend
.dbsym e zx _zx S[.1]
_dip::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.dbsym e dip _dip c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
st -y,R24
in R24,0x3f
st -y,R24
.dbline -1
.dbline 28
; #include <include.h>
; #pragma interrupt_handler UART_RX_interrupt:iv_USART0_RX
; #pragma interrupt_handler int0_isr:iv_INT0
; //全局变量
; //如果变量会在中断服务程序中被修改,须加volatile限定
; volatile unsigned char FLAG = 0; //按键标志
;
;
; volatile unsigned char RX_index; //存放接收数据的个数
; volatile uchar ready_rx=0;
; volatile uchar receivebox[70];
; unsigned char light;
;
; extern uchar hantemp[32];
; //extern uchar dis[1024];
; extern uchar dis[3072];
; extern volatile uchar ISDstatus ;
; //extern volatile uchar countwait;
; extern uchar ISDmoney[5];
; volatile uchar SPEAK ;
; zhx zx={0x38,
; 0x38,0x38,0x38,0x38,
; 0x38,0x38,0x38,0x38,
; 0x38,0x38,0x38, 0x38};
; uchar flg;
; uchar dip=0;
; void int0_isr(void)
; {
.dbline 31
; //put_c(0xa5);
; //countwait = 0;
; SPEAK = 1;
ldi R24,1
sts _SPEAK,R24
.dbline -2
L2:
ld R24,y+
out 0x3f,R24
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e put_c _put_c fV
; c -> R16
.even
_put_c::
.dbline -1
.dbline 36
; //if(ISDstatus & 0X02)
; // ISDstatus &= 0xfd;
; }
; void put_c(unsigned char c) //发送采用查询方式
; {
L4:
.dbline 37
L5:
.dbline 37
; while( !(UCSR0A & (1<<UDRE0)) );
sbis 0xb,5
rjmp L4
.dbline 38
; UDR0=c;
out 0xc,R16
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e put_s _put_s fV
; ptr -> R20,R21
.even
_put_s::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 42
; }
;
; void put_s(unsigned char *ptr)
; {
xjmp L9
L8:
.dbline 44
.dbline 45
movw R30,R20
ld R16,Z+
movw R20,R30
xcall _put_c
.dbline 46
L9:
.dbline 43
; while (*ptr)
movw R30,R20
ldd R2,z+0
tst R2
brne L8
.dbline 47
; {
; put_c(*ptr++);
; }
; put_c(0x0D);
ldi R16,13
xcall _put_c
.dbline 48
; put_c(0x0A); //结尾发送回车换行
ldi R16,10
xcall _put_c
.dbline -2
L7:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r ptr 20 pc
.dbend
.dbfunc e UART_RX_interrupt _UART_RX_interrupt fV
; temp -> R20
.even
_UART_RX_interrupt::
xcall push_lset
xcall push_gset2
.dbline -1
.dbline 52
; }
;
; void UART_RX_interrupt(void) //串口接收中断服务程序
; {
.dbline 55
;
; uchar temp;
; temp = UDR0;
in R20,0xc
.dbline 60
;
; // countwait = 0;
;
;
; switch(ready_rx)
lds R22,_ready_rx
clr R23
cpi R22,0
cpc R22,R23
breq L15
X0:
cpi R22,1
ldi R30,0
cpc R23,R30
brne X2
xjmp L22
X2:
cpi R22,2
ldi R30,0
cpc R23,R30
brne X3
xjmp L24
X3:
cpi R22,3
ldi R30,0
cpc R23,R30
brne X4
xjmp L29
X4:
cpi R22,4
ldi R30,0
cpc R23,R30
brne X5
xjmp L35
X5:
cpi R22,5
ldi R30,0
cpc R23,R30
brne X6
xjmp L41
X6:
cpi R22,10
ldi R30,0
cpc R23,R30
brne X7
xjmp L53
X7:
xjmp L12
X1:
.dbline 61
; {
L15:
.dbline 64
; case 0:
;
; if(temp == 'D' ) //如果接收到显示控制命令
cpi R20,68
brne L16
.dbline 65
; {
.dbline 66
; FLAG = 0;
clr R2
sts _FLAG,R2
.dbline 67
; ready_rx = 1;
ldi R24,1
sts _ready_rx,R24
.dbline 68
; RX_index = 1;
sts _RX_index,R24
.dbline 69
; receivebox[0] = temp;
sts _receivebox,R20
.dbline 70
; }
xjmp L13
L16:
.dbline 72
;
; else if(temp == 'A') // 接收到A打头控制命令
cpi R20,65
brne L18
.dbline 73
; {
.dbline 74
; FLAG = 0;
clr R2
sts _FLAG,R2
.dbline 75
; ready_rx = 2;
ldi R24,2
sts _ready_rx,R24
.dbline 77
;
; receivebox[0] = temp;
sts _receivebox,R20
.dbline 78
; }
xjmp L13
L18:
.dbline 79
; else if(temp ==0x43)
cpi R20,67
breq X8
xjmp L13
X8:
.dbline 80
; {
.dbline 81
; clean(0);
clr R16
xcall _clean
.dbline 82
; }
.dbline 84
;
; break;
xjmp L13
L22:
.dbline 86
; case 1:
; receivebox[1] = temp; //存下亮度值
sts _receivebox+1,R20
.dbline 87
; RX_index = 2;
ldi R24,2
sts _RX_index,R24
.dbline 88
; ready_rx = 3;
ldi R24,3
sts _ready_rx,R24
.dbline 89
; break;
xjmp L13
L24:
.dbline 91
; case 2:
; if(temp=='a')
cpi R20,97
brne L25
.dbline 92
; {ready_rx=5;receivebox[1]|=0xf0;RX_index = 14;}
.dbline 92
ldi R24,5
sts _ready_rx,R24
.dbline 92
lds R24,_receivebox+1
ori R24,240
sts _receivebox+1,R24
.dbline 92
ldi R24,14
sts _RX_index,R24
.dbline 92
xjmp L13
L25:
.dbline 99
; /*else if(temp=='b')
; {ready_rx=6;receivebox[1]|=0x20;}
; else if(temp=='c')
; {ready_rx=7;receivebox[1]|=0x40;}
; else if(temp=='d')
; {ready_rx=8;receivebox[1]|=0x80;}*/
; else {ready_rx=10;receivebox[1] = temp; RX_index = 5;}
.dbline 99
ldi R24,10
sts _ready_rx,R24
.dbline 99
sts _receivebox+1,R20
.dbline 99
ldi R24,5
sts _RX_index,R24
.dbline 99
.dbline 101
;
; break;
xjmp L13
L29:
.dbline 103
; case 3:
; receivebox[2] = temp; //存下位置值
sts _receivebox+2,R20
.dbline 104
; if(temp==0x00)
tst R20
brne L31
.dbline 105
; {
.dbline 106
; RX_index = 64;
ldi R24,64
sts _RX_index,R24
.dbline 107
; ready_rx = 4;
ldi R24,4
sts _ready_rx,R24
.dbline 108
; }
xjmp L13
L31:
.dbline 109
; else if((temp>0)&&(temp<5))
clr R2
cp R2,R20
brsh L33
cpi R20,5
brsh L33
.dbline 110
; { RX_index = 16;
.dbline 110
ldi R24,16
sts _RX_index,R24
.dbline 111
; ready_rx = 4;
ldi R24,4
sts _ready_rx,R24
.dbline 112
; }
xjmp L13
L33:
.dbline 114
; else
; { ready_rx = 0;
.dbline 114
clr R2
sts _ready_rx,R2
.dbline 115
; }
.dbline 117
;
; break;
xjmp L13
L35:
.dbline 119
; case 4:
; if(receivebox[2] ==0x00)
lds R2,_receivebox+2
tst R2
brne L36
.dbline 120
; {receivebox[64 - RX_index + 3] = temp;
.dbline 120
lds R2,_RX_index
clr R3
ldi R30,64
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_receivebox+3
ldi R25,>_receivebox+3
add R30,R24
adc R31,R25
std z+0,R20
.dbline 121
; }
xjmp L37
L36:
.dbline 123
; else
; {receivebox[16 - RX_index + 3] = temp;
.dbline 123
lds R2,_RX_index
clr R3
ldi R30,16
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_receivebox+3
ldi R25,>_receivebox+3
add R30,R24
adc R31,R25
std z+0,R20
.dbline 124
; }
L37:
.dbline 125
; RX_index--;
lds R24,_RX_index
subi R24,1
sts _RX_index,R24
.dbline 128
; //if(!(c) || (temp == 0x05))
; // ready_rx = 0;
; break;
xjmp L13
L41:
.dbline 131
; case 5:
;
; RX_index--;
lds R24,_RX_index
subi R24,1
sts _RX_index,R24
.dbline 132
; if(RX_index==13)
lds R24,_RX_index
cpi R24,13
brne L42
.dbline 133
; {zx.zhou=temp;flg|=0x10;}
.dbline 133
sts _zx,R20
.dbline 133
lds R24,_flg
ori R24,16
sts _flg,R24
.dbline 133
xjmp L13
L42:
.dbline 134
; else if((RX_index>8)&&(RX_index<13))
ldi R24,8
lds R2,_RX_index
cp R24,R2
brsh L44
lds R24,_RX_index
cpi R24,13
brsh L44
.dbline 135
; { zx.dunwei[12-RX_index]=temp;flg|=0x20;}
.dbline 135
lds R2,_RX_index
clr R3
ldi R30,12
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_zx+1
ldi R25,>_zx+1
add R30,R24
adc R31,R25
std z+0,R20
.dbline 135
lds R24,_flg
ori R24,32
sts _flg,R24
.dbline 135
xjmp L13
L44:
.dbline 136
; else if((RX_index>4)&&(RX_index<9))
ldi R24,4
lds R2,_RX_index
cp R24,R2
brsh L47
lds R24,_RX_index
cpi R24,9
brsh L47
.dbline 137
; {zx.zongzhong[8-RX_index]=temp;flg|=0x40;}
.dbline 137
lds R2,_RX_index
clr R3
ldi R30,8
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_zx+5
ldi R25,>_zx+5
add R30,R24
adc R31,R25
std z+0,R20
.dbline 137
lds R24,_flg
ori R24,64
sts _flg,R24
.dbline 137
xjmp L13
L47:
.dbline 138
; else if((RX_index>0)&&(RX_index<5))
clr R2
lds R3,_RX_index
cp R2,R3
brsh L13
lds R24,_RX_index
cpi R24,5
brsh L13
.dbline 139
; {zx.chaoxian[4-RX_index]=temp;flg|=0x80;}
.dbline 139
lds R2,_RX_index
clr R3
ldi R30,4
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_zx+9
ldi R25,>_zx+9
add R30,R24
adc R31,R25
std z+0,R20
.dbline 139
lds R24,_flg
ori R24,128
sts _flg,R24
.dbline 139
.dbline 140
; break;
xjmp L13
L53:
.dbline 144
;
;
; case 10:
; RX_index--;
lds R24,_RX_index
subi R24,1
sts _RX_index,R24
.dbline 145
; receivebox[5 - RX_index + 1] = temp;
lds R2,_RX_index
clr R3
ldi R30,5
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_receivebox+1
ldi R25,>_receivebox+1
add R30,R24
adc R31,R25
std z+0,R20
.dbline 146
; if(RX_index==0) flg=0xf0;
lds R2,_RX_index
tst R2
brne L13
.dbline 146
ldi R24,240
sts _flg,R24
.dbline 149
; //if(!(RX_index--) || (temp == 0x05))
; // ready_rx = 0;
; break;
xjmp L13
L12:
.dbline 152
;
; default:
; ready_rx = 0;
clr R2
sts _ready_rx,R2
.dbline 153
; RX_index = 0;
sts _RX_index,R2
.dbline 154
; break;
L13:
.dbline 160
;
; }
;
; // 如果收不满16或者64字节数据,最后停止位是 0x05
;
; if ( (ready_rx ==4) && (RX_index == 0) )
lds R24,_ready_rx
cpi R24,4
brne L57
lds R2,_RX_index
tst R2
brne L57
.dbline 161
; { //receivebox[65]=0x05;
.dbline 162
; ready_rx = 0;
clr R2
sts _ready_rx,R2
.dbline 163
; FLAG = 1;
ldi R24,1
sts _FLAG,R24
.dbline 165
; //uart0_txd(0xaa);
; }
L57:
.dbline 166
; if((RX_index == 0) &&(( ready_rx >= 5)&&( ready_rx <= 10) ))
lds R2,_RX_index
tst R2
brne L59
lds R24,_ready_rx
cpi R24,5
brlo L59
ldi R24,10
lds R2,_ready_rx
cp R24,R2
brlo L59
.dbline 167
; {
.dbline 168
; ready_rx = 0;
clr R2
sts _ready_rx,R2
.dbline 169
; if(flg==0xf0)
lds R24,_flg
cpi R24,240
brne L61
.dbline 170
; {flg=0;
.dbline 170
sts _flg,R2
.dbline 171
; FLAG=1;
ldi R24,1
sts _FLAG,R24
.dbline 172
; }
L61:
.dbline 173
L59:
.dbline -2
L11:
xcall pop_gset2
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym r temp 20 c
.dbend
.dbfunc e uart0_txd _uart0_txd fV
; x -> R16
.even
_uart0_txd::
.dbline -1
.dbline 178
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -