?? 呼死你.lst
字號:
(0014) OCR1BH = 0x0B;
02E8 E08B LDI R24,0xB
02E9 BD89 OUT 0x29,R24
(0015) OCR1BL = 0x40;
02EA E480 LDI R24,0x40
02EB BD88 OUT 0x28,R24
(0016) ICR1H = 0x0B;
02EC E08B LDI R24,0xB
02ED BD87 OUT 0x27,R24
(0017) ICR1L = 0x40;
02EE E480 LDI R24,0x40
02EF BD86 OUT 0x26,R24
(0018) TCCR1A = 0x00;
02F0 BC2F OUT 0x2F,R2
(0019) TCCR1B = 0x04; //start Timer
02F1 E084 LDI R24,4
02F2 BD8E OUT 0x2E,R24
02F3 9508 RET
_timer1_ovf_isr:
02F4 938A ST R24,-Y
02F5 B78F IN R24,0x3F
02F6 938A ST R24,-Y
(0020) }
(0021)
(0022) #pragma interrupt_handler timer1_ovf_isr:9
(0023) void timer1_ovf_isr(void)
(0024) {
(0025) //TIMER1 has overflowed
(0026) TCNT1H = 0xF4; //reload counter high value
02F7 EF84 LDI R24,0xF4
02F8 BD8D OUT 0x2D,R24
(0027) TCNT1L = 0xC0; //reload counter low value
02F9 EC80 LDI R24,0xC0
02FA BD8C OUT 0x2C,R24
(0028) Time.Bz = TRUE; //定時標志置1
02FB E081 LDI R24,1
02FC 93800096 STS 0x96,R24
02FE 9189 LD R24,Y+
02FF BF8F OUT 0x3F,R24
0300 9189 LD R24,Y+
0301 9518 RETI
(0029) }
(0030) /**************************************************
(0031) *原型:void time1_task(void)
(0032) *功能:20ms中斷到置time_s為1
(0033) *說明:利用定時中斷去執行任務
(0034) *參數:無
(0035) *返回:無
(0036) **************************************************/
(0037) void Time1Task(void)
(0038) {
(0039) Time.Bz = FALSE; //毫秒定時標志清0
_Time1Task:
0302 2422 CLR R2
0303 92200096 STS 0x96,R2
(0040)
(0041) Time.Sec--;
0305 9180008F LDS R24,Time
0307 5081 SUBI R24,1
0308 9380008F STS Time,R24
(0042) //LED閃爍
(0043) LEDCOUNT = LED();
030A DD5D RCALL _LED
030B 9300008D STS LEDCOUNT,R16
(0044)
(0045) if(Time.Mec ++ == 400)//1分鐘定時450*120ms
030D 90200094 LDS R2,0x94
030F 90300095 LDS R3,0x95
0311 01C1 MOVW R24,R2
0312 9601 ADIW R24,1
0313 93900095 STS 0x95,R25
0315 93800094 STS 0x94,R24
0317 01C1 MOVW R24,R2
0318 3980 CPI R24,0x90
0319 E0E1 LDI R30,1
031A 079E CPC R25,R30
031B F561 BNE 0x0348
(0046) {
(0047) Time.Mec = NULL;//毫秒計數清
031C 2422 CLR R2
031D 2433 CLR R3
031E 92300095 STS 0x95,R3
0320 92200094 STS 0x94,R2
(0048) if(Time.Min++ == Time.Atd)//如果定時到
0322 90200092 LDS R2,Time+3
0324 90300093 LDS R3,0x93
0326 01C1 MOVW R24,R2
0327 9601 ADIW R24,1
0328 93900093 STS 0x93,R25
032A 93800092 STS Time+3,R24
032C 90400090 LDS R4,Time+1
032E 90500091 LDS R5,Time+2
0330 1424 CP R2,R4
0331 0435 CPC R3,R5
0332 F4A9 BNE 0x0348
(0049) {
(0050) Time.Min = NULL;//分鐘定時清0
0333 2422 CLR R2
0334 2433 CLR R3
0335 92300093 STS 0x93,R3
0337 92200092 STS Time+3,R2
(0051) if((!Busybz)&&(WorkCount>RTEL))//如果在未拔號狀態
0339 90200183 LDS R2,Busybz
033B 2022 TST R2
033C F459 BNE 0x0348
033D E082 LDI R24,2
033E 90200184 LDS R2,WorkCount
0340 1582 CP R24,R2
0341 F430 BCC 0x0348
(0052) {
(0053) WorkCount = CALLTEL;
0342 E083 LDI R24,3
0343 93800184 STS WorkCount,R24
(0054) DealTxUartBz = TRUE;//如果未讀到電話本,紅燈亮
0345 E081 LDI R24,1
0346 9380017E STS DealTxUartBz,R24
(0055) }
(0056) }
(0057) }
(0058) if(!Time.Sec)//定時到
0348 9020008F LDS R2,Time
034A 2022 TST R2
034B F451 BNE 0x0356
(0059) {
(0060)
(0061) Time.Sec = timesec; //2秒定時
034C E184 LDI R24,0x14
034D 9380008F STS Time,R24
(0062) if(WorkCount < NULLACK)
034F 91800184 LDS R24,WorkCount
0351 3087 CPI R24,7
0352 F418 BCC 0x0356
(0063) DealTxUartBz = TRUE;//如果未讀到電話本,紅燈亮
0353 E081 LDI R24,1
0354 9380017E STS DealTxUartBz,R24
(0064)
(0065) }
0356 9508 RET
FILE: D:\MEGA8\西門子3508\3508呼死你\main.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include <eeprom.h>
(0004) #include "uart.h"
(0005) #include "define.h"
(0006) #include "led.h"
(0007)
(0008) #include "uartnews.h"
(0009) #include "timetask.h"
(0010)
(0011) /* 工程名稱: 呼死你
(0012) * 日期: 06-04-26
(0013) * 最后修改日期: 06-04-26
(0014) * 芯片類型: ATmega 8L
(0015) * 晶體: 7.3728MHZ
(0016) * 熔絲位: 8F9F
(0017) * 鎖定位: 00E8
(0018) * 看門狗: 安全極別2-常開 2.1秒溢出
(0019) * 版本:
(0020) * 測試說明: 06-04-26測試
(0021)
(0022)
(0023) /**************************************************
(0024) *原型:void open(void)
(0025) *功能:判斷是初次上電,觸發開機
(0026) *參數:無
(0027) *返回:無
(0028) *日期:04-12-7
(0029) **************************************************/
(0030) //定義開機腳
(0031) #define OPENBIT 7
(0032) #define RESTKEY 3
(0033) void open(void)
(0034) {
(0035) SET_BIT(PORTD,OPENBIT);
_open:
0357 9A97 SBI 0x12,7
(0036)
(0037) delay_ms(2000);
0358 ED00 LDI R16,0xD0
0359 E017 LDI R17,7
035A DCF6 RCALL _delay_ms
(0038)
(0039) CLR_BIT(PORTD,OPENBIT); //開平觸低
035B 9897 CBI 0x12,7
035C 9508 RET
(0040) }
(0041) /**************************************************
(0042) *原型:void port_init(void)
(0043) *功能:端口初始化
(0044) *參數:無
(0045) *返回:無
(0046) **************************************************/
(0047) void port_init(void)
(0048) {
(0049) PORTC = 0X0F; //PC0-PC38870輸入,與按鍵共用,
_port_init:
035D E08F LDI R24,0xF
035E BB85 OUT 0x15,R24
(0050) DDRC = 0X20;
035F E280 LDI R24,0x20
0360 BB84 OUT 0x14,R24
(0051)
(0052) PORTB = 0X00;
0361 2422 CLR R2
0362 BA28 OUT 0x18,R2
(0053) DDRB = 0X3F; //PB0-PB2,PB5輸出控制,PB3話筒開關,PB4提示聲,PB5警聲
0363 E38F LDI R24,0x3F
0364 BB87 OUT 0x17,R24
(0054)
(0055) DDRD = 0XF6; //PD0,PD2-AUDIO,PD3輸入
0365 EF86 LDI R24,0xF6
0366 BB81 OUT 0x11,R24
(0056) PORTD = NULL;
0367 BA22 OUT 0x12,R2
(0057)
(0058) RED_LED;//紅燈亮
0368 9A94 SBI 0x12,4
0369 9508 RET
(0059) }
(0060) /**************************************************
(0061) *原型:void watchdog_init(void)
(0062) *功能:dog初始化
(0063) *參數:無
(0064) *返回:無
(0065) **************************************************/
(0066) void watchdog_init(void)
(0067) {
(0068) WDR(); //清dog
_watchdog_init:
036A 95A8 WDR
(0069) WDTCR = ( (1<<WDCE) | (1<<WDE) );
036B E188 LDI R24,0x18
036C BD81 OUT 0x21,R24
(0070) WDTCR = 0x0F; //2.1秒復位
036D E08F LDI R24,0xF
036E BD81 OUT 0x21,R24
036F 9508 RET
(0071) }
(0072) /**************************************************
(0073) *原型:void watchdog_task(void)
(0074) *功能:判斷是否dog復位,如不是觸發手機開機
(0075) *參數:無
(0076) *返回:無
(0077) **************************************************/
(0078) void watchdog_task(void)
(0079) {
(0080) if(!GET_BIT(MCUCSR , WDRF))//是否dog復位
_watchdog_task:
0370 B624 IN R2,0x34
0371 FC23 SBRC R2,3
0372 C001 RJMP 0x0374
(0081) open();
0373 DFE3 RCALL _open
0374 9508 RET
(0082) }
(0083)
(0084) /**************************************************
(0085) *原型:void init_devices(void)
(0086) *功能:初始化
(0087) *參數:無
(0088) *返回:無
(0089) **************************************************/
(0090) void init_devices(void)
(0091) {
(0092) watchdog_init(); //設置WDT
_init_devices:
0375 DFF4 RCALL _watchdog_init
(0093) port_init(); //I/O口定義
0376 DFE6 RCALL _port_init
(0094) timer1_init();
0377 DF66 RCALL _timer1_init
(0095) InitUART( 23 ); //19.2 to 7.3728M
0378 E107 LDI R16,0x17
0379 DD56 RCALL _InitUART
(0096) Time.Sec = timesec;//定時器賦初值
037A E184 LDI R24,0x14
037B 9380008F STS Time,R24
(0097) TIMSK = 0X04;//開T1定時
037D E084 LDI R24,4
037E BF89 OUT 0x39,R24
(0098) _SEI();
037F 9478 BSET 7
0380 9508 RET
(0099) }
(0100) /*******************************************/
(0101) void main( void )
(0102) {
(0103) delay_ms(100);
_main:
0381 E604 LDI R16,0x64
0382 E010 LDI R17,0
0383 DCCD RCALL _delay_ms
(0104) init_devices(); //系統初始化
0384 DFF0 RCALL _init_devices
(0105) watchdog_task(); //判 斷是否WDT溢出
0385 DFEA RCALL _watchdog_task
(0106)
(0107) WorkCount = LINE;
0386 2422 CLR R2
0387 92200184 STS WorkCount,R2
0389 C012 RJMP 0x039C
(0108)
(0109) while ( 1 )
(0110) {
(0111) WDR();
038A 95A8 WDR
(0112) if(Time.Bz)
038B 90200096 LDS R2,0x96
038D 2022 TST R2
038E F009 BEQ 0x0390
(0113) Time1Task();
038F DF72 RCALL _Time1Task
(0114) if(DealTxUartBz) //處理發送緩沖區
0390 9020017E LDS R2,DealTxUartBz
0392 2022 TST R2
0393 F009 BEQ 0x0395
(0115) DealTx();
0394 DEF0 RCALL _DealTx
(0116) if(DealRxUartBz) //處理串口接收緩沖區
0395 9020017F LDS R2,DealRxUartBz
0397 2022 TST R2
0398 F019 BEQ 0x039C
(0117) DealRxBuf(UART_RXHEAD);
FILE: <library>
0399 91000180 LDS R16,UART_RXHEAD
039B DE72 RCALL _DealRxBuf
039C CFED RJMP 0x038A
039D 9508 RET
empy16s:
039E 920A ST R0,-Y
039F 921A ST R1,-Y
03A0 938A ST R24,-Y
03A1 939A ST R25,-Y
03A2 9F02 MUL R16,R18
03A3 01C0 MOVW R24,R0
03A4 9F12 MUL R17,R18
03A5 0D90 ADD R25,R0
03A6 9F03 MUL R16,R19
03A7 0D90 ADD R25,R0
03A8 018C MOVW R16,R24
03A9 9199 LD R25,Y+
03AA 9189 LD R24,Y+
03AB 9019 LD R1,Y+
03AC 9009 LD R0,Y+
03AD 9508 RET
pop_gset2:
03AE E0E2 LDI R30,2
03AF C010 RJMP pop
pop_gset3:
03B0 E0E4 LDI R30,4
03B1 C00E RJMP pop
pop_gset5:
03B2 27EE CLR R30
03B3 C00C RJMP pop
push_gset5:
03B4 92FA ST R15,-Y
03B5 92EA ST R14,-Y
push_gset4:
03B6 92DA ST R13,-Y
03B7 92CA ST R12,-Y
push_gset3:
03B8 92BA ST R11,-Y
03B9 92AA ST R10,-Y
push_gset2:
03BA 937A ST R23,-Y
03BB 936A ST R22,-Y
push_gset1:
03BC 935A ST R21,-Y
03BD 934A ST R20,-Y
03BE 9508 RET
pop_gset1:
03BF E0E1 LDI R30,1
pop:
03C0 9149 LD R20,Y+
03C1 9159 LD R21,Y+
03C2 FDE0 SBRC R30,0
03C3 9508 RET
03C4 9169 LD R22,Y+
03C5 9179 LD R23,Y+
03C6 FDE1 SBRC R30,1
03C7 9508 RET
03C8 90A9 LD R10,Y+
03C9 90B9 LD R11,Y+
03CA FDE2 SBRC R30,2
03CB 9508 RET
03CC 90C9 LD R12,Y+
03CD 90D9 LD R13,Y+
03CE FDE3 SBRC R30,3
03CF 9508 RET
03D0 90E9 LD R14,Y+
03D1 90F9 LD R15,Y+
03D2 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -