📄 uart.s
字号:
brlo L47
L45:
movw R30,R28
ldd R2,z+10
ldd R3,z+11
ldd R4,z+12
ldd R5,z+13
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
movw R30,R28
std z+10,R2
std z+11,R3
std z+12,R4
std z+13,R5
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
breq X2
rjmp L44
X2:
L43:
adiw R28,4
rcall pop_gset3
adiw R28,4
.dbline 0 ; func end
ret
; s -> R20,R21
.even
_puts::
rcall push_gset1
movw R20,R16
; for(loopi=0;loopi<2;loopi++);
; }
; }
;
;
;
; /* 字符串输出函数 */
; void puts(char *s)
; {
rjmp L53
L52:
movw R30,R20
ldd R16,z+0
rcall _putchar
subi R20,255 ; offset = 1
sbci R21,255
L53:
; while (*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L52
; {
; putchar(*s);
; s++;
; }
; putchar(0x0a);//回车换行
ldi R16,10
rcall _putchar
; putchar(0x0d);
ldi R16,13
rcall _putchar
L51:
rcall pop_gset1
.dbline 0 ; func end
ret
.even
_uart_init::
; }
;
;
; /* UART初始化 */
; void uart_init(void)
; {
; // OSCCAL=read_flash(0x1f20);
; rsok00=0;
clr R2
sts _rsok00,R2
; rsok10=0;
sts _rsok10,R2
; rsok20=0;
sts _rsok20,R2
; rsok30=0;
sts _rsok30,R2
; rsok40=0;
sts _rsok40,R2
; rcvd1=0x00;
sts _rcvd1,R2
; rscnt11=0x00;
sts _rscnt11,R2
; rscnt12=0x00;
sts _rscnt12,R2
; rscnt13=0x00;
sts _rscnt13,R2
; rscnt01=0x00;
sts _rscnt01,R2
; xx0=0;xx1=0;
sts _xx0,R2
sts _xx1,R2
; //UCSRB=0x90;//允许发送并开接收中断,发送不使能
; UCSRB = 0x00;
out 0xa,R2
; UCSRA = 0x00;
out 0xb,R2
; UBRRL=(fosc/16/(baud+1))%256;
ldi R24,104
out 0x9,R24
; UBRRH=(fosc/16/(baud+1))/256;
out 0x20,R2
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
ldi R24,134
out 0x20,R24
; UCSRB=0x98;
ldi R24,152
out 0xa,R24
L55:
.dbline 0 ; func end
ret
.even
_port_init::
; }
;
; void port_init(void)
; {
; //PB1-PCLK
; //PB0-PDIO
; PORTB = 0x00;
clr R2
out 0x18,R2
; DDRB = 0x03;
ldi R24,3
out 0x17,R24
; //PD5-PSEL
; //PD3-DCLK
; //PD4-DIO
; PORTD = 0x20;
ldi R24,32
out 0x12,R24
; DDRD = 0x30;
ldi R24,48
out 0x11,R24
L56:
.dbline 0 ; func end
ret
.even
_entcomm::
; }
;
; /* 确认帧 */
; void entcomm(void)
; {
; xx0=0;xx1=0;
clr R2
sts _xx0,R2
sts _xx1,R2
; UDR=0x55;
ldi R24,85
out 0xc,R24
; xx0=xx0^0x55;
eor R2,R24
sts _xx0,R2
; xx1+=0x55;
lds R24,_xx1
subi R24,171 ; addi 85
sts _xx1,R24
L58:
L59:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L58
; UDR=0xaa;
ldi R24,170
out 0xc,R24
; xx0=xx0^0xaa;
clr R25
lds R2,_xx0
clr R3
eor R2,R24
eor R3,R25
sts _xx0,R2
; xx1+=0xaa;
lds R24,_xx1
subi R24,86 ; addi 170
sts _xx1,R24
L61:
L62:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L61
; UDR=addressper;
ldi R24,16
out 0xc,R24
; xx0=xx0^addressper;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=addressper;
lds R24,_xx1
subi R24,240 ; addi 16
sts _xx1,R24
L64:
L65:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L64
; UDR=0x56;
ldi R24,86
out 0xc,R24
; xx0=xx0^0x56;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x56;
lds R24,_xx1
subi R24,170 ; addi 86
sts _xx1,R24
L67:
L68:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L67
; UDR=0;
clr R2
out 0xc,R2
; xx0=xx0^0x00;
lds R2,_xx0
sts _xx0,R2
; xx1+=0x00;
lds R2,_xx1
sts _xx1,R2
L70:
L71:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L70
; UDR=0x16;
ldi R24,22
out 0xc,R24
; xx0=xx0^0x16;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x16;
lds R24,_xx1
subi R24,234 ; addi 22
sts _xx1,R24
L73:
L74:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L73
; UDR=xx0;
lds R2,_xx0
out 0xc,R2
L76:
L77:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L76
L57:
.dbline 0 ; func end
ret
.even
_voltagerepol::
; }
;
; /* 发送交流电压值 */
; void voltagerepol(void)
; {
; xx0=0;xx1=0;
clr R2
sts _xx0,R2
sts _xx1,R2
; UDR=0x55;
ldi R24,85
out 0xc,R24
; xx0=xx0^0x55;
eor R2,R24
sts _xx0,R2
; xx1+=0x55;
lds R24,_xx1
subi R24,171 ; addi 85
sts _xx1,R24
L80:
L81:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L80
; UDR=0xaa;
ldi R24,170
out 0xc,R24
; xx0=xx0^0xaa;
clr R25
lds R2,_xx0
clr R3
eor R2,R24
eor R3,R25
sts _xx0,R2
; xx1+=0xaa;
lds R24,_xx1
subi R24,86 ; addi 170
sts _xx1,R24
L83:
L84:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L83
; UDR=addressper;
ldi R24,16
out 0xc,R24
; xx0=xx0^addressper;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=addressper;
lds R24,_xx1
subi R24,240 ; addi 16
sts _xx1,R24
L86:
L87:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L86
; UDR=0x01;
ldi R24,1
out 0xc,R24
; xx0=xx0^0x01;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x01;
lds R24,_xx1
subi R24,255 ; addi 1
sts _xx1,R24
L89:
L90:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L89
; UDR=0x03;
ldi R24,3
out 0xc,R24
; xx0=xx0^0x03;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x03;
lds R24,_xx1
subi R24,253 ; addi 3
sts _xx1,R24
L92:
L93:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L92
; for(w1=0;w1<3;w1++)
clr R2
sts _w1,R2
rjmp L98
L95:
; {
; UDR=databak[w1];
ldi R24,<_databak
ldi R25,>_databak
lds R30,_w1
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0xc,R2
; xx0=xx0^databak[w1];
lds R30,_w1
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_xx0
eor R3,R2
sts _xx0,R3
; xx1+=databak[w1];
lds R30,_w1
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_xx1
add R3,R2
sts _xx1,R3
L99:
L100:
sbis 0xb,5
rjmp L99
L96:
lds R24,_w1
subi R24,255 ; addi 1
sts _w1,R24
L98:
lds R24,_w1
cpi R24,3
brlo L95
; while (!(UCSRA&(1<<UDRE)));
; }
; UDR=0x16;
ldi R24,22
out 0xc,R24
; xx0=xx0^0x16;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x16;
lds R24,_xx1
subi R24,234 ; addi 22
sts _xx1,R24
L102:
L103:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L102
; UDR=xx0;
lds R2,_xx0
out 0xc,R2
L105:
L106:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L105
L79:
.dbline 0 ; func end
ret
.even
_currentrepol::
; }
;
; /* 发送交流电流值 */
; void currentrepol(void)
; {
; xx0=0;xx1=0;
clr R2
sts _xx0,R2
sts _xx1,R2
; UDR=0x55;
ldi R24,85
out 0xc,R24
; xx0=xx0^0x55;
eor R2,R24
sts _xx0,R2
; xx1+=0x55;
lds R24,_xx1
subi R24,171 ; addi 85
sts _xx1,R24
L109:
L110:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L109
; UDR=0xaa;
ldi R24,170
out 0xc,R24
; xx0=xx0^0xaa;
clr R25
lds R2,_xx0
clr R3
eor R2,R24
eor R3,R25
sts _xx0,R2
; xx1+=0xaa;
lds R24,_xx1
subi R24,86 ; addi 170
sts _xx1,R24
L112:
L113:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L112
; UDR=addressper;
ldi R24,16
out 0xc,R24
; xx0=xx0^addressper;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=addressper;
lds R24,_xx1
subi R24,240 ; addi 16
sts _xx1,R24
L115:
L116:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L115
; UDR=0x02;
ldi R24,2
out 0xc,R24
; xx0=xx0^0x02;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x02;
lds R24,_xx1
subi R24,254 ; addi 2
sts _xx1,R24
L118:
L119:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L118
; UDR=0x03;
ldi R24,3
out 0xc,R24
; xx0=xx0^0x03;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x03;
lds R24,_xx1
subi R24,253 ; addi 3
sts _xx1,R24
L121:
L122:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L121
; for(w1=0;w1<3;w1++)
clr R2
sts _w1,R2
rjmp L127
L124:
; {
; UDR=databak[w1];
ldi R24,<_databak
ldi R25,>_databak
lds R30,_w1
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0xc,R2
; xx0=xx0^databak[w1];
lds R30,_w1
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_xx0
eor R3,R2
sts _xx0,R3
; xx1+=databak[w1];
lds R30,_w1
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_xx1
add R3,R2
sts _xx1,R3
L128:
L129:
sbis 0xb,5
rjmp L128
L125:
lds R24,_w1
subi R24,255 ; addi 1
sts _w1,R24
L127:
lds R24,_w1
cpi R24,3
brlo L124
; while (!(UCSRA&(1<<UDRE)));
; }
; UDR=0x16;
ldi R24,22
out 0xc,R24
; xx0=xx0^0x16;
lds R2,_xx0
eor R2,R24
sts _xx0,R2
; xx1+=0x16;
lds R24,_xx1
subi R24,234 ; addi 22
sts _xx1,R24
L131:
L132:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L131
; UDR=xx0;
lds R2,_xx0
out 0xc,R2
L134:
L135:
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L134
L108:
.dbline 0 ; func end
ret
; tmp -> R10
; itmp -> R12
; addr -> R10
.even
_ReadFromCC1020Register::
rcall push_gset4
mov R10,R16
; }
;
;
;
; unsigned char ReadFromCC1020Register(unsigned char addr)
; {
;
; unsigned char itmp;
; unsigned char tmp;
; // P2MDOUT = 0xE0;
; DDRD = 0x30;
ldi R24,48
out 0x11,R24
; DDRB = 0X03;
ldi R24,3
out 0x17,R24
; delay(10);
ldi R16,10
ldi R17,0
ldi R18,0
ldi R19,0
rcall _delay
; PSEL_0;
cbi 0x12,5
; itmp = (addr&0x7f) <<1 ;
mov R24,R10
andi R24,127
mov R12,R24
lsl R12
ldi R24,8
mov R10,R24
rjmp L141
L138:
; for(tmp=8;tmp>0;tmp--){
; Pclk_0;
cbi 0x18,1
; if((itmp&0x80) == 0x80) PData_1;
mov R24,R12
andi R24,128
cpi R24,128
brne L142
sbi 0x18,0
rjmp L143
L142:
; else PData_0;
cbi 0x18,0
L143:
ldi R16,10
ldi R17,0
ldi R18,0
ldi R19,0
rcall _delay
sbi 0x18,1
ldi R16,10
ldi R17,0
ldi R18,0
ldi R19,0
rcall _delay
lsl R12
L139:
dec R10
L141:
clr R2
cp R2,R10
brlo L138
; delay(10);
; Pclk_1;
; delay(10);
; itmp = itmp<<1;
; }
; itmp = 0;
clr R12
; // P2MDOUT = 0xA0;
;
; PData_1;
sbi 0x18,0
; DDRB = 0X02;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -