📄 m8mpt.s
字号:
.module M8MPt.c
.area data(ram, con, rel)
_TXADFG::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e TXADFG _TXADFG c
_SlaveCR::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e SlaveCR _SlaveCR c
_TXINTMAX::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e TXINTMAX _TXINTMAX c
_TXINTFG::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e TXINTFG _TXINTFG c
_RXINTMAX::
.blkb 1
.area idata
.byte 16
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e RXINTMAX _RXINTMAX c
_RXINTCR::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e RXINTCR _RXINTCR c
_RXINTFG::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e RXINTFG _RXINTFG c
_TXbufP::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e TXbufP _TXbufP c
_RXbufP::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e RXbufP _RXbufP c
_RXbufPmax::
.blkb 1
.area idata
.byte 11
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e RXbufPmax _RXbufPmax c
_RXERROR::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e RXERROR _RXERROR c
_WaitCR0::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e WaitCR0 _WaitCR0 c
_WaitCR1::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e WaitCR1 _WaitCR1 c
.area text(rom, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbfunc e SoftTimer _SoftTimer fV
.even
_SoftTimer::
.dbline -1
.dbline 63
.dbline 64
lds R24,_WaitCR0
subi R24,255 ; addi 1
sts _WaitCR0,R24
.dbline 65
ldi R24,254
lds R2,_WaitCR0
cp R24,R2
brsh L2
.dbline 66
.dbline 67
clr R2
sts _WaitCR0,R2
.dbline 68
lds R24,_WaitCR1
subi R24,255 ; addi 1
sts _WaitCR1,R24
.dbline 69
L2:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SoftTimerStart _SoftTimerStart fV
.even
_SoftTimerStart::
.dbline -1
.dbline 72
; //////////主机
;
; #include <iom8v.h>
; #include <macros.h>
; //ISARM pro
; #define OUTLED1OFF PORTB|=0x01 //for
; #define OUTLED1ON PORTB&=~0x01
; #define OUTLED2OFF PORTB|=0x02 //For
; #define OUTLED2ON PORTB&=~0x02
; #define OUTLED2Pulse PORTB^=0x02
;
; #define OUTLED3OFF PORTB|=0x04 //For
; #define OUTLED3ON PORTB&=~0x04
; #define OUTLED3Pulse PORTB^=0x04
; #define OUTLED4OFF PORTB|=0x08 //For
; #define OUTLED4ON PORTB&=~0x08
; #define OUTLED4Pulse PORTB^=0x08
;
; #define OUTDEON PORTD|=0x10
; #define OUTDEOFF PORTD&=~0x10
;
; #define KB0 (PINC&0x01)
; #define KB1 (PINC&0x02)
;
;
; ///UART///
; #define TXENABLE UCSRB&=~(1<<RXEN);UCSRB|=(1<<TXEN);
; #define RXENABLE UCSRB&=~(1<<TXEN);UCSRB|=(1<<RXEN);
; #define TXADDRESS UCSRB|=(1<<TXB8);TXADFG=0;
; #define TXDATA UCSRB&=~(1<<TXB8);TXADFG=1;
; //
; #define TRFG0 0xFE
; #define TRFG1 0xFD
; #define TRFG2 0xF1
; #define TRFG3 0xF0
; //最大子板数
; #define SlaveBMAX 15
; //////////////////////////////
; //////////////////////////////
; unsigned char TXADFG=0;
;
; unsigned char SlaveEN[17];
; unsigned char SlaveCR=0; //子板编号计数器,当作物理地址
; unsigned char TXINTMAX=1;//下行发送中断次数控制值
; //unsigned char TXINTCR=0;//下行发送中断次数计数器
; unsigned char TXINTFG=0;//下行发送中断次数完成标志
; unsigned char RXINTMAX=16;//下行发送中断次数控制值
; unsigned char RXINTCR=0;//下行发送中断次数计数器
; unsigned char RXINTFG=0;//下行发送中断次数完成标志
;
; unsigned char TXBUF[30]; //发送缓冲区
; unsigned char RXBUF[30]; //接收缓冲区
; unsigned char TXbufP=0; //发送缓冲区下标
; unsigned char RXbufP=0; //接收缓冲区下标
; unsigned char RXbufPmax=11;//接收数据实际长度
;
; unsigned char RXERROR=0;
; /////Soft Timer
; unsigned char WaitCR0=0;
; unsigned char WaitCR1=0;
;
; void SoftTimer(void)
; {
; WaitCR0++;
; if(WaitCR0>254)
; {
; WaitCR0=0;
; WaitCR1++;
; }//if(WaitCR0>0)
; }
; void SoftTimerStart(void)
; {
.dbline 73
; WaitCR0=0;
clr R2
sts _WaitCR0,R2
.dbline 74
; WaitCR1=0;
sts _WaitCR1,R2
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 78
; }
;
; void watchdog_init(void)
; {
.dbline 79
; WDR();
wdr
.dbline 80
; WDTCR=0x0F ;
ldi R24,15
out 0x21,R24
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Delay_1ms _Delay_1ms fV
; i -> R16,R17
.even
_Delay_1ms::
.dbline -1
.dbline 84
; }
;
; void Delay_1ms(void)
; {
.dbline 87
; unsigned int i;
;
; for (i = 1; i<1140; i++)
ldi R16,1
ldi R17,0
rjmp L10
L7:
.dbline 89
L8:
.dbline 87
subi R16,255 ; offset = 1
sbci R17,255
L10:
.dbline 87
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L7
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delayXms _delayXms fV
; i -> R20,R21
; n -> R22,R23
.even
_delayXms::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 93
;
; ;
; }
;
; void delayXms(unsigned int n)
; {
.dbline 94
; unsigned int i=0;
clr R20
clr R21
rjmp L13
L12:
.dbline 96
.dbline 97
rcall _Delay_1ms
.dbline 98
subi R20,255 ; offset = 1
sbci R21,255
.dbline 99
L13:
.dbline 95
; while(i<n)
cp R20,R22
cpc R21,R23
brlo L12
.dbline -2
L11:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 104
; {
; Delay_1ms();
; i++;
; }
; }
;
;
; void port_init(void)
; {
.dbline 107
;
;
; PORTB=0xFF; //PB set to 1
ldi R24,255
out 0x18,R24
.dbline 108
; DDRB=0xFF;
out 0x17,R24
.dbline 110
;
; PORTC=0xFF; //PC set to 1
out 0x15,R24
.dbline 111
; DDRC=0x00; //
clr R2
out 0x14,R2
.dbline 113
;
; PORTD=0xFF; //PD set to 1
out 0x12,R24
.dbline 114
; DDRD=0x12; //PD0:RXD PD1:TXD PD2:DI0 PD3:DI1
ldi R24,18
out 0x11,R24
.dbline 118
; //PD4:DI2 PD5:DI3
; //OUTDEON;
;
; SFIOR&=~(1<<PUD); //OPEN UP LINK
in R24,0x30
andi R24,251
out 0x30,R24
.dbline 122
; //MCUCR|=(1<<ISC11); //Down edge int1
; //GICR=(1<<INT1); //enable INT1
;
; delayXms(10); //delay 1s
ldi R16,10
ldi R17,0
rcall _delayXms
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 126
; }
; //////////////////////////UART INIT
; void uart_init(void)
; {
.dbline 128
;
; OUTDEOFF;
cbi 0x12,4
.dbline 129
; UCSRB=0x00;
clr R2
out 0xa,R2
.dbline 130
; UBRRL=0x25; //19.2kbps
ldi R24,37
out 0x9,R24
.dbline 132
; //TX EN ,9Bit ,Adress init
; UCSRB=((1<<RXCIE)|(1<<TXCIE)|(1<<UCSZ2));
ldi R24,196
out 0xa,R24
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer_init _timer_init fV
.even
_timer_init::
.dbline -1
.dbline 138
; //UCSRB=((1<<TXCIE)|(1<<TXCIE)|(1<<TXEN)|(1<<TXB8));
; }//void uart_init(void)
;
; ///////////////Timer init
; void timer_init(void)
; {
.dbline 139
; ;
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 16
rjmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
.dbline -1
.dbline 145
; }
;
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 146
; ;
.dbline -2
L18:
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 26
rjmp _uart1_tx_isr
.area text(rom, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbfunc e uart1_tx_isr _uart1_tx_isr fV
.even
_uart1_tx_isr::
st -y,R2
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 153
;
; }//void timer1_ovf_isr(void)
;
; //TR to SLAVE
; #pragma interrupt_handler uart1_tx_isr:14
; void uart1_tx_isr(void)
; {
.dbline 154
; TXbufP++;
lds R24,_TXbufP
subi R24,255 ; addi 1
sts _TXbufP,R24
.dbline 157
;
;
; if(TXbufP<14)
cpi R24,14
brsh L20
.dbline 158
; {
.dbline 160
;
; if(TXbufP==2 )
cpi R24,2
brne L22
.dbline 161
; {
.dbline 162
; OUTLED3Pulse;
ldi R24,4
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 165
; // Delay_1ms();
; //delayXms(1000);
; TXDATA;
cbi 0xa,0
.dbline 165
ldi R24,1
sts _TXADFG,R24
.dbline 165
.dbline 169
;
; //OUTLED3Pulse;
; //
; }//if(TXbufP>1)
L22:
.dbline 170
; UDR=TXBUF[TXbufP];
ldi R24,<_TXBUF
ldi R25,>_TXBUF
lds R30,_TXbufP
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0xc,R2
.dbline 171
; }
rjmp L21
L20:
.dbline 173
; else
; {
.dbline 174
; OUTLED1ON;
cbi 0x18,0
.dbline 175
; RXENABLE
cbi 0xa,3
.dbline 175
sbi 0xa,4
.dbline 176
; }//else
L21:
.dbline 177
; OUTLED2Pulse;
ldi R24,2
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline -2
L19:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 22
rjmp _uart1_rx_isr
.area text(rom, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbfunc e uart1_rx_isr _uart1_rx_isr fV
.even
_uart1_rx_isr::
st -y,R2
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 184
.dbline 185
ldi R24,<_RXBUF
ldi R25,>_RXBUF
lds R30,_RXbufP
clr R31
add R30,R24
adc R31,R25
in R2,0xc
std z+0,R2
.dbline 186
lds R24,_RXbufP
subi R24,255 ; addi 1
sts _RXbufP,R24
.dbline 187
lds R24,_RXBUF+11
cpi R24,240
brne L25
.dbline 188
cbi 0x18,3
L25:
.dbline -2
L24:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e TXbufRDY _TXbufRDY fV
.even
_TXbufRDY::
.dbline -1
.dbline 192
; //Delay_1ms();
; //OUTLED2Pulse;
; }//void uart1_tx_isr(void)
;
; #pragma interrupt_handler uart1_rx_isr:12
; void uart1_rx_isr(void)
; {
; RXBUF[RXbufP]=UDR;
; RXbufP++;
; if(RXBUF[11]==TRFG3)
; OUTLED4ON;
;
; }//void uart1_rx_isr(void)
; void TXbufRDY(void)
; {
.dbline 193
; TXBUF[0]=5;
ldi R24,5
sts _TXBUF,R24
.dbline 194
; TXBUF[1]=5;
sts _TXBUF+1,R24
.dbline 195
; TXBUF[2]=TRFG0;
ldi R24,254
sts _TXBUF+2,R24
.dbline 196
; TXBUF[3]=TRFG1;
ldi R24,253
sts _TXBUF+3,R24
.dbline 197
; TXBUF[4]=0;
clr R2
sts _TXBUF+4,R2
.dbline 198
; TXBUF[5]=1;
ldi R24,1
sts _TXBUF+5,R24
.dbline 199
; TXBUF[12]=TRFG2;
ldi R24,241
sts _TXBUF+12,R24
.dbline 200
; TXBUF[13]=TRFG3;
ldi R24,240
sts _TXBUF+13,R24
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
_SLSTEP::
.blkb 1
.area idata
.byte 10
.area data(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbsym e SLSTEP _SLSTEP c
.area text(rom, con, rel)
.dbfile E:\m8com\M8MPt.c
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 207
; }//void TXbufRDY(void)
;
;
;
; unsigned char SLSTEP=10;
; void main()
; {
.dbline 208
; unsigned char i=0;
clr R20
.dbline 211
;
; //delayXms(500);
; port_init(); //IO初始化
rcall _port_init
.dbline 212
; uart_init();
rcall _uart_init
.dbline 215
; //timer_init();
;
; delayXms(100);
ldi R16,100
ldi R17,0
rcall _delayXms
.dbline 216
; RXbufP=0;
clr R2
sts _RXbufP,R2
.dbline 217
; TXbufRDY()
rcall _TXbufRDY
sei
.dbline 219
; SEI();
; TXbufP=0;
clr R2
sts _TXbufP,R2
.dbline 220
; TXADDRESS;
sbi 0xa,0
.dbline 220
sts _TXADFG,R2
.dbline 220
.dbline 221
; TXENABLE;
cbi 0xa,4
.dbline 221
sbi 0xa,3
.dbline 221
.dbline 222
; UDR=TXBUF[0];
lds R2,_TXBUF
out 0xc,R2
L37:
.dbline 224
.dbline 228
L38:
.dbline 223
rjmp L37
X0:
.dbline -2
L36:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\m8com\M8MPt.c
_RXBUF::
.blkb 30
.dbsym e RXBUF _RXBUF A[30:30]c
_TXBUF::
.blkb 30
.dbsym e TXBUF _TXBUF A[30:30]c
_SlaveEN::
.blkb 17
.dbsym e SlaveEN _SlaveEN A[17:17]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -