📄 cs5532_test.lst
字号:
(0849)
(0850) for(i=0;i<uart_rx_counter;i++)
01D3 2744 CLR R20
01D4 2755 CLR R21
01D5 C009 RJMP 0x01DF
(0851) {
(0852) put_char(uart_rx_buf[i]);
01D6 E68A LDI R24,0x6A
01D7 E090 LDI R25,0
01D8 01FA MOVW R30,R20
01D9 0FE8 ADD R30,R24
01DA 1FF9 ADC R31,R25
01DB 8100 LDD R16,Z+0
01DC D036 RCALL _put_char
01DD 5F4F SUBI R20,0xFF
01DE 4F5F SBCI R21,0xFF
01DF 9020007F LDS R2,uart_rx_counter
01E1 2433 CLR R3
01E2 1542 CP R20,R2
01E3 0553 CPC R21,R3
01E4 F388 BCS 0x01D6
(0853) }
(0854) /*switch(cmd)
(0855) {
(0856) case 0:
(0857) {
(0858) break;
(0859) }
(0860) default:
(0861) {
(0862) break;
(0863) }
(0864) }*/
(0865) }
01E5 940E02A2 CALL pop_gset1
01E7 9508 RET
_uart0_tx_isr:
01E8 922A ST R2,-Y
01E9 938A ST R24,-Y
01EA 939A ST R25,-Y
01EB 93EA ST R30,-Y
01EC 93FA ST R31,-Y
01ED B62F IN R2,0x3F
01EE 922A ST R2,-Y
(0866) }
(0867)
(0868) /**********************************************************************
(0869) functionName:void uart0_tx_isr(void)
(0870) description:串口发送中断函数
(0871) **********************************************************************/
(0872) #pragma interrupt_handler uart0_tx_isr:14
(0873) void uart0_tx_isr(void)
(0874) {
(0875) uart_tx_counter--;
01EF 9180007E LDS R24,uart_tx_counter
01F1 5081 SUBI R24,1
01F2 9380007E STS uart_tx_counter,R24
(0876) if(uart_tx_counter) //如果还没有发送完成
01F4 2388 TST R24
01F5 F0A1 BEQ 0x020A
(0877) {
(0878) UDR=uart_tx_buf[uart_tx_rd_ptr];
01F6 E882 LDI R24,0x82
01F7 E090 LDI R25,0
01F8 91E00080 LDS R30,uart_tx_rd_ptr
01FA 27FF CLR R31
01FB 0FE8 ADD R30,R24
01FC 1FF9 ADC R31,R25
01FD 8020 LDD R2,Z+0
01FE B82C OUT 0x0C,R2
(0879) uart_tx_rd_ptr++;
01FF 91800080 LDS R24,uart_tx_rd_ptr
0201 5F8F SUBI R24,0xFF
0202 93800080 STS uart_tx_rd_ptr,R24
(0880) if(uart_tx_rd_ptr==UART_BUF_SIZE)uart_tx_rd_ptr=0;
0204 3184 CPI R24,0x14
0205 F429 BNE 0x020B
0206 2422 CLR R2
0207 92200080 STS uart_tx_rd_ptr,R2
(0881) }
0209 C001 RJMP 0x020B
(0882) else
(0883) {
(0884) UCSRB&=~BIT(TXCIE); //发送结束中断不使能
020A 9856 CBI 0x0A,6
(0885) //UART_TX_LED;
(0886) }
020B 9029 LD R2,Y+
020C BE2F OUT 0x3F,R2
020D 91F9 LD R31,Y+
020E 91E9 LD R30,Y+
020F 9199 LD R25,Y+
0210 9189 LD R24,Y+
0211 9029 LD R2,Y+
0212 9518 RETI
(0887) }
(0888)
(0889)
(0890) /**********************************************************************
(0891) functionName:uint08 write_uart(uint08 uart_data)
(0892) description:写串口数据
(0893) **********************************************************************/
(0894) uint08 put_char(uint08 uart_data)
(0895) {
(0896) if(uart_tx_counter==UART_BUF_SIZE)
_put_char:
uart_data --> R16
0213 9180007E LDS R24,uart_tx_counter
0215 3184 CPI R24,0x14
0216 F411 BNE 0x0219
(0897) {
(0898) return(UART_FALSE); //表示串口缓冲器溢出
0217 2700 CLR R16
0218 C02E RJMP 0x0247
(0899) }
(0900) uart_tx_buf[uart_tx_wr_ptr]=uart_data;
0219 E882 LDI R24,0x82
021A E090 LDI R25,0
021B 91E00081 LDS R30,uart_tx_wr_ptr
021D 27FF CLR R31
021E 0FE8 ADD R30,R24
021F 1FF9 ADC R31,R25
0220 8300 STD Z+0,R16
(0901) uart_tx_wr_ptr++;
0221 91800081 LDS R24,uart_tx_wr_ptr
0223 5F8F SUBI R24,0xFF
0224 93800081 STS uart_tx_wr_ptr,R24
(0902) if(uart_tx_wr_ptr>=UART_BUF_SIZE)uart_tx_wr_ptr=0;
0226 3184 CPI R24,0x14
0227 F018 BCS 0x022B
0228 2422 CLR R2
0229 92200081 STS uart_tx_wr_ptr,R2
(0903) uart_tx_counter++;
022B 9180007E LDS R24,uart_tx_counter
022D 5F8F SUBI R24,0xFF
022E 9380007E STS uart_tx_counter,R24
(0904) if(uart_tx_counter==1)
0230 3081 CPI R24,1
0231 F4A1 BNE 0x0246
(0905) {
(0906) UDR=uart_tx_buf[uart_tx_rd_ptr];
0232 E882 LDI R24,0x82
0233 E090 LDI R25,0
0234 91E00080 LDS R30,uart_tx_rd_ptr
0236 27FF CLR R31
0237 0FE8 ADD R30,R24
0238 1FF9 ADC R31,R25
0239 8020 LDD R2,Z+0
023A B82C OUT 0x0C,R2
(0907) uart_tx_rd_ptr++;
023B 91800080 LDS R24,uart_tx_rd_ptr
023D 5F8F SUBI R24,0xFF
023E 93800080 STS uart_tx_rd_ptr,R24
(0908) if(uart_tx_rd_ptr==UART_BUF_SIZE)uart_tx_rd_ptr=0;
0240 3184 CPI R24,0x14
0241 F419 BNE 0x0245
0242 2422 CLR R2
0243 92200080 STS uart_tx_rd_ptr,R2
(0909) UCSRB|=BIT(TXCIE); //发送结束中断使能
0245 9A56 SBI 0x0A,6
(0910) }
(0911) return(UART_TURE);
0246 EF0F LDI R16,0xFF
0247 9508 RET
_put_chars:
sentData --> R20
0248 940E029F CALL push_gset1
024A 01A8 MOVW R20,R16
(0912) }
(0913)
(0914)
(0915) /**********************************************************************
(0916) functionName:putChars(BYTE *sentData)
(0917) description:通过串口发送数据字符串
(0918) **********************************************************************/
(0919) uint08 put_chars(uint08 *sentData)
(0920) {
024B C009 RJMP 0x0255
(0921) while(*sentData)
(0922) {
(0923) if(put_char(*sentData)==UART_FALSE)
024C 01FA MOVW R30,R20
024D 8100 LDD R16,Z+0
024E DFC4 RCALL _put_char
024F 2300 TST R16
0250 F411 BNE 0x0253
(0924) return(UART_FALSE);
0251 2700 CLR R16
0252 C007 RJMP 0x025A
(0925) sentData++;
0253 5F4F SUBI R20,0xFF
0254 4F5F SBCI R21,0xFF
0255 01FA MOVW R30,R20
0256 8020 LDD R2,Z+0
0257 2022 TST R2
0258 F799 BNE 0x024C
(0926)
(0927) }
(0928) return(UART_TURE);
0259 EF0F LDI R16,0xFF
025A 940E02A2 CALL pop_gset1
025C 9508 RET
FILE: G:\CS5532\firmware\initial.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **
(0003) **
(0004) **
(0005) ** 文 件 名: initial.c
(0006) ** 最后修改日期: 2007-10-8 11:17
(0007) ** 描 述: 初始化函数
(0008) ** 版 本: V1.0
(0009) ** 主 控 芯 片:M16 晶振频率:7.37MHZ,
(0010) ** IDE:ICCAVR 6.31
(0011) **********************************************************************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014)
(0015) #include "DEFINE.H"
(0016) #include "UART.H"
(0017)
(0018)
(0019)
(0020) /**********************************************************************
(0021) functionName:void paraInit(void)
(0022) description:变量初始化
(0023) **********************************************************************/
(0024) void global_para_init(void)
(0025) {
(0026) ;
_global_para_init:
025D 9508 RET
(0027) }
(0028)
(0029)
(0030) /**********************************************************************
(0031) functionName:void eepromParaInit(void)
(0032) description:对存储在EEPROM的变量初始化
(0033) **********************************************************************/
(0034) void eeprom_para_init(void)
(0035) {
(0036) ;
_eeprom_para_init:
025E 9508 RET
(0037)
(0038) }
(0039)
(0040)
(0041)
(0042)
(0043) /**********************************************************************
(0044) functionName:void portInit(void)
(0045) description:M8 IO初始化
(0046) ************************************ **********************************/
(0047) void port_init(void)
(0048) {
(0049) PORTA = 0xFF;
_port_init:
025F EF8F LDI R24,0xFF
0260 BB8B OUT 0x1B,R24
(0050) DDRA = 0xFF;
0261 BB8A OUT 0x1A,R24
(0051)
(0052) PORTB = 0xFF;
0262 BB88 OUT 0x18,R24
(0053) DDRB = 0xFF;
0263 BB87 OUT 0x17,R24
(0054)
(0055) PORTC = 0xFF;
0264 BB85 OUT 0x15,R24
(0056) DDRC = 0xFF;
0265 BB84 OUT 0x14,R24
(0057)
(0058) PORTD = 0xFF;
0266 BB82 OUT 0x12,R24
(0059) DDRD = 0xFF;
0267 BB81 OUT 0x11,R24
0268 9508 RET
(0060) }
(0061)
(0062)
(0063)
(0064)
(0065)
(0066) /**********************************************************************
(0067) functionName:void t0Init(void)
(0068) description:定时器0初始化
(0069) **********************************************************************/
(0070) void timer0_init(void)
(0071) {
(0072) ;
_timer0_init:
0269 9508 RET
(0073) }
(0074)
(0075)
(0076)
(0077)
(0078)
(0079) /**********************************************************************
(0080) functionName:void allInit(void)
(0081) description:初始化所有的器件以及变量
(0082) **********************************************************************/
(0083) void all_init(void)
(0084) {
(0085) //开始初始化工作
(0086) CLI(); //关闭中断源
_all_init:
026A 94F8 BCLR 7
(0087) port_init();
026B DFF3 RCALL _port_init
(0088) uart_init();
026C 940E00EC CALL _uart_init
(0089) global_para_init();
026E DFEE RCALL _global_para_init
(0090) eeprom_para_init();
026F DFEE RCALL _eeprom_para_init
(0091) timer0_init();
0270 DFF8 RCALL _timer0_init
(0092)
(0093) MCUCR = 0x00;
0271 2422 CLR R2
0272 BE25 OUT 0x35,R2
(0094) GICR = 0x00;
0273 BE2B OUT 0x3B,R2
(0095) TIMSK = 0x00; //定时器0中断源设置
0274 BE29 OUT 0x39,R2
(0096) SEI();
0275 9478 BSET 7
0276 9508 RET
_us_delay:
i --> R20
ud --> R16
0277 940E029F CALL push_gset1
FILE: G:\CS5532\firmware\delay.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **
(0003) **
(0004) **
(0005) ** 文 件 名: delay.c
(0006) ** 最后修改日期: 2007-10-8 11:19
(0007) ** 描 述: 延时函数
(0008) ** 版 本: V1.0
(0009) ** 主 控 芯 片:M16 晶振频率:7.37MHZ,
(0010) ** IDE:ICCAVR 6.31
(0011) **********************************************************************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014)
(0015) #include "DEFINE.H"
(0016)
(0017) /**********************************************************************
(0018) functionName:void us_delay(uint08 ud)
(0019) description:us级别的函数
(0020) ud=10 10us
(0021) ud=50 32.5us
(0022) ud=100 60us
(0023) ud=200 114us
(0024) **********************************************************************/
(0025) void us_delay(uint08 ud)
(0026) {
(0027) uint08 i;
(0028) for(i=0;i<ud;i++);
0279 2744 CLR R20
027A C001 RJMP 0x027C
027B 9543 INC R20
027C 1740 CP R20,R16
027D F3E8 BCS 0x027B
027E 940E02A2 CALL pop_gset1
0280 9508 RET
_ms_delay:
j --> R20
i --> R10
md --> R22
0281 940E029B CALL push_gset3
0283 2F60 MOV R22,R16
(0029) }
(0030)
(0031) /**********************************************************************
(0032) functionName:void ms_delay(void)
(0033) description:ms级别的函数
(0034) md=10 10ms
(0035) md=50 50ms
(0036) md=100 100ms
(0037) md=150 150ms
(0038) md=200 200ms
(0039) **********************************************************************/
(0040) void ms_delay(uint08 md)
(0041) {
(0042) uint08 i,j;
(0043) for(j=0;j<md;j++)
0284 2744 CLR R20
0285 C009 RJMP 0x028F
(0044) {
(0045) for(i=0;i<10;i++)
0286 24AA CLR R10
0287 C003 RJMP 0x028B
(0046) us_delay(173);
FILE: <library>
0288 EA0D LDI R16,0xAD
0289 DFED RCALL _us_delay
028A 94A3 INC R10
028B 2D8A MOV R24,R10
028C 308A CPI R24,0xA
028D F3D0 BCS 0x0288
028E 9543 INC R20
028F 1746 CP R20,R22
0290 F3A8 BCS 0x0286
0291 940E0294 CALL pop_gset3
0293 9508 RET
pop_gset3:
0294 E0E4 LDI R30,4
0295 940C02A3 JMP pop
push_gset5:
0297 92FA ST R15,-Y
0298 92EA ST R14,-Y
push_gset4:
0299 92DA ST R13,-Y
029A 92CA ST R12,-Y
push_gset3:
029B 92BA ST R11,-Y
029C 92AA ST R10,-Y
push_gset2:
029D 937A ST R23,-Y
029E 936A ST R22,-Y
push_gset1:
029F 935A ST R21,-Y
02A0 934A ST R20,-Y
02A1 9508 RET
pop_gset1:
02A2 E0E1 LDI R30,1
pop:
02A3 9149 LD R20,Y+
02A4 9159 LD R21,Y+
02A5 FDE0 SBRC R30,0
02A6 9508 RET
02A7 9169 LD R22,Y+
02A8 9179 LD R23,Y+
02A9 FDE1 SBRC R30,1
02AA 9508 RET
02AB 90A9 LD R10,Y+
02AC 90B9 LD R11,Y+
02AD FDE2 SBRC R30,2
02AE 9508 RET
02AF 90C9 LD R12,Y+
02B0 90D9 LD R13,Y+
02B1 FDE3 SBRC R30,3
02B2 9508 RET
02B3 90E9 LD R14,Y+
02B4 90F9 LD R15,Y+
02B5 9508 RET
lsr32:
02B6 920F PUSH R0
02B7 9009 LD R0,Y+
02B8 2000 TST R0
02B9 F031 BEQ 0x02C0
02BA 9536 LSR R19
02BB 9527 ROR R18
02BC 9517 ROR R17
02BD 9507 ROR R16
02BE 940A DEC R0
02BF CFF8 RJMP 0x02B8
02C0 900F POP R0
02C1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -