?? 呼死你.lst
字號:
__start:
__text_start:
0029 E5CF LDI R28,0x5F
002A E0D4 LDI R29,4
002B BFCD OUT 0x3D,R28
002C BFDE OUT 0x3E,R29
002D 51C0 SUBI R28,0x10
002E 40D0 SBCI R29,0
002F EA0A LDI R16,0xAA
0030 8308 STD Y+0,R16
0031 2400 CLR R0
0032 E8EC LDI R30,0x8C
0033 E0F0 LDI R31,0
0034 E011 LDI R17,1
0035 38E5 CPI R30,0x85
0036 07F1 CPC R31,R17
0037 F011 BEQ 0x003A
0038 9201 ST R0,Z+
0039 CFFB RJMP 0x0035
003A 8300 STD Z+0,R16
003B E2E6 LDI R30,0x26
003C E0F0 LDI R31,0
003D E6A0 LDI R26,0x60
003E E0B0 LDI R27,0
003F E010 LDI R17,0
0040 35E2 CPI R30,0x52
0041 07F1 CPC R31,R17
0042 F021 BEQ 0x0047
0043 95C8 LPM
0044 9631 ADIW R30,1
0045 920D ST R0,X+
0046 CFF9 RJMP 0x0040
0047 D339 RCALL _main
_exit:
0048 CFFF RJMP _exit
FILE: D:\MEGA8\西門子3508\3508呼死你\define.h
(0001)
(0002) #define NULL 0
(0003) #define FALSE 0
(0004) #define TRUE 1
(0005) //定義接收緩沖區的長度
(0006) #define UARTRXLEN 200
(0007) #define TELLEN 30
(0008) //時間長度不超過4位(0-9999)分鐘
(0009) //命令編號
(0010) #define LINE 0
(0011) //
(0012) #define SETUPTEL 1
(0013) #define RTEL 2
(0014)
(0015) #define CALLTEL 3
(0016)
(0017) #define GET 4
(0018) #define RINGOFF 5
(0019) #define QUERY 6
(0020) #define NULLACK 7
(0021) //------------------------
(0022) #define SET_BIT(X,Y) (X|=(1<<Y))
(0023) #define CLR_BIT(X,Y) (X&=~(1<<Y))
(0024) #define GET_BIT(X,Y) (X&(1<<Y))
(0025) #define XOR_BIT(X,Y) (X^=(1<<Y))
(0026)
(0027) //定時
(0028) #define timesec 20 //2s
(0029)
(0030) #define time3sec 30
(0031)
(0032) #define LEDON SET_BIT(PORTB,5)
(0033) #define LEDOFF CLR_BIT(PORTB,5)
(0034)
(0035) /* Static Variables */
(0036) typedef unsigned char uchar;
(0037) typedef unsigned int uint;
(0038)
(0039) unsigned char WorkCount; //工作指示
(0040) static unsigned char Busybz;
(0041) unsigned char *pir; //指針
(0042) static unsigned char UART_RXHEAD; //接收計數器
(0043) static unsigned char DealRxUartBz; //串口接收處理標志
(0044) static unsigned char DealTxUartBz; //串口發送標志
(0045)
(0046) static unsigned char TelBuf[TELLEN+1]; //電話本緩沖區
(0047)
(0048) //
(0049) union
(0050) {
(0051) uchar Buf[UARTRXLEN]; //定義接收緩沖區
(0052) struct
(0053) {
(0054) uchar sd[100];
(0055) uchar Temp[100];
(0056) }ch;
(0057) }Uart;
(0058) //時間定時器
(0059) struct
(0060) {
(0061) unsigned char Sec; //分鐘計數器
(0062) unsigned int Atd; //拔號定時0-9999分鐘,0為不定時
(0063) unsigned int Min; //分鐘
(0064) unsigned int Mec; //分
(0065) uchar Bz; //毫秒定時到標志置1
(0066) }Time;
(0067)
(0068)
(0069)
(0070) void delay_us(int time)
(0071) {
(0072) do
(0073) {
(0074) time--;
_delay_us:
time --> R16
0049 5001 SUBI R16,1
004A 4010 SBCI R17,0
(0075) }
(0076) while (time>1);
004B E081 LDI R24,1
004C E090 LDI R25,0
004D 1780 CP R24,R16
004E 0791 CPC R25,R17
004F F3CC BLT 0x0049
0050 9508 RET
_delay_ms:
time --> R20
0051 D36A RCALL push_gset1
0052 01A8 MOVW R20,R16
(0077) }
(0078) /* 毫秒級延時程序 */
(0079) void delay_ms(unsigned int time)
(0080) {
0053 C006 RJMP 0x005A
(0081) while(time!=NULL)
(0082) {
(0083) WDR();
0054 95A8 WDR
(0084) delay_us(825);
0055 E309 LDI R16,0x39
0056 E013 LDI R17,3
0057 DFF1 RCALL _delay_us
(0085) time--;
0058 5041 SUBI R20,1
0059 4050 SBCI R21,0
005A 3040 CPI R20,0
005B 0745 CPC R20,R21
005C F7B9 BNE 0x0054
005D D361 RCALL pop_gset1
005E 9508 RET
FILE: D:\MEGA8\西門子3508\3508呼死你\led.h
(0001) //燈控制
(0002) #define RBIT 4
(0003) #define GBIT 5
(0004) #define RED_LED SET_BIT(PORTD,RBIT)
(0005) #define GREEN_LED SET_BIT(PORTD,GBIT)
(0006) #define CLOSE_LED {CLR_BIT(PORTD,RBIT);CLR_BIT(PORTD,GBIT);}
(0007)
(0008) static unsigned char raybz; //燈指示
(0009) static unsigned char LEDCOUNT; //燈任務器
(0010) /*********************************************
(0011) *原型:void ray_led(void)
(0012) *功能:燈指示,
(0013) *參數:無
(0014) *返回:
(0015) **********************************************/
(0016) void ray_led(void)
(0017) {
(0018) raybz = TRUE;
_ray_led:
005F E081 LDI R24,1
0060 9380008E STS raybz,R24
(0019) CLOSE_LED;
0062 9894 CBI 0x12,4
0063 9895 CBI 0x12,5
(0020) LEDCOUNT=6;
0064 E086 LDI R24,6
0065 9380008D STS LEDCOUNT,R24
0067 9508 RET
(0021) }
(0022) /*********************************************
(0023) *原型:unsigned char LED(void)
(0024) *功能:燈指示,根據各種狀態指示燈工作,500ms閃爍一次
(0025) *參數:無
(0026) *返回:LEDCOUNT
(0027) **********************************************/
(0028) unsigned char LED(void)
(0029) {
(0030) static unsigned char led1;
(0031) switch(LEDCOUNT)
_LED:
0068 9100008D LDS R16,LEDCOUNT
006A 2711 CLR R17
006B 3000 CPI R16,0
006C 0701 CPC R16,R17
006D F0E9 BEQ 0x008B
006E 3001 CPI R16,1
006F E0E0 LDI R30,0
0070 071E CPC R17,R30
0071 F141 BEQ 0x009A
0072 3002 CPI R16,2
0073 E0E0 LDI R30,0
0074 071E CPC R17,R30
0075 F149 BEQ 0x009F
0076 3003 CPI R16,3
0077 E0E0 LDI R30,0
0078 071E CPC R17,R30
0079 F151 BEQ 0x00A4
007A 3004 CPI R16,4
007B E0E0 LDI R30,0
007C 071E CPC R17,R30
007D F159 BEQ 0x00A9
007E 3005 CPI R16,5
007F E0E0 LDI R30,0
0080 071E CPC R17,R30
0081 F159 BEQ 0x00AD
0082 3006 CPI R16,6
0083 E0E0 LDI R30,0
0084 071E CPC R17,R30
0085 F161 BEQ 0x00B2
0086 3007 CPI R16,7
0087 E0E0 LDI R30,0
0088 071E CPC R17,R30
0089 F159 BEQ 0x00B5
008A C044 RJMP 0x00CF
(0032) {
(0033) case 0: //在打電話紅燈閃爍
(0034) if(Busybz)
008B 90200183 LDS R2,Busybz
008D 2022 TST R2
008E F011 BEQ 0x0091
(0035) return 1;//在忙狀態紅燈閃爍
008F E001 LDI R16,1
0090 C03E RJMP 0x00CF
(0036)
(0037) //連接時橙燈閃爍
(0038) else if(WorkCount <= RTEL)
0091 E082 LDI R24,2
0092 90200184 LDS R2,WorkCount
0094 1582 CP R24,R2
0095 F010 BCS 0x0098
(0039) return 4;
0096 E004 LDI R16,4
0097 C037 RJMP 0x00CF
(0040)
(0041) else
(0042) return 3;//綠燈亮
0098 E003 LDI R16,3
0099 C035 RJMP 0x00CF
(0043) case 1:
(0044) CLOSE_LED;//紅燈閃爍
009A 9894 CBI 0x12,4
009B 9895 CBI 0x12,5
(0045) RED_LED;
009C 9A94 SBI 0x12,4
(0046) return 6;
009D E006 LDI R16,6
009E C030 RJMP 0x00CF
(0047) case 2:
(0048) CLOSE_LED;//紅燈亮
009F 9894 CBI 0x12,4
00A0 9895 CBI 0x12,5
(0049) RED_LED ;
00A1 9A94 SBI 0x12,4
(0050) return 0;
00A2 2700 CLR R16
00A3 C02B RJMP 0x00CF
(0051) case 3:
(0052) CLOSE_LED;//綠燈閃爍
00A4 9894 CBI 0x12,4
00A5 9895 CBI 0x12,5
(0053) GREEN_LED;
00A6 9A95 SBI 0x12,5
(0054) return 6;
00A7 E006 LDI R16,6
00A8 C026 RJMP 0x00CF
(0055) case 4:
(0056) RED_LED;//橙燈亮
00A9 9A94 SBI 0x12,4
(0057) GREEN_LED;
00AA 9A95 SBI 0x12,5
(0058) return 6;
00AB E006 LDI R16,6
00AC C022 RJMP 0x00CF
(0059) case 5:
(0060) CLOSE_LED;//綠燈亮
00AD 9894 CBI 0x12,4
00AE 9895 CBI 0x12,5
(0061) GREEN_LED;
00AF 9A95 SBI 0x12,5
(0062) return 0;
00B0 2700 CLR R16
00B1 C01D RJMP 0x00CF
(0063) case 6:
(0064) led1 = 5;//500ms閃爍一次
00B2 E085 LDI R24,5
00B3 9380008C STS led1,R24
(0065) case 7:
(0066) if(led1--)
00B5 9020008C LDS R2,led1
00B7 2433 CLR R3
00B8 2D82 MOV R24,R2
00B9 5081 SUBI R24,1
00BA 9380008C STS led1,R24
00BC 2022 TST R2
00BD F011 BEQ 0x00C0
(0067) return 7;
00BE E007 LDI R16,7
00BF C00F RJMP 0x00CF
(0068) if(!raybz)
00C0 9020008E LDS R2,raybz
00C2 2022 TST R2
00C3 F439 BNE 0x00CB
(0069) {
(0070) raybz = TRUE;
00C4 E081 LDI R24,1
00C5 9380008E STS raybz,R24
(0071) CLOSE_LED;
00C7 9894 CBI 0x12,4
00C8 9895 CBI 0x12,5
(0072) return 6;
00C9 E006 LDI R16,6
00CA C004 RJMP 0x00CF
(0073) }
(0074) else {
(0075) raybz = FALSE;
00CB 2422 CLR R2
00CC 9220008E STS raybz,R2
(0076) return 0;
00CE 2700 CLR R16
00CF 9508 RET
FILE: D:\MEGA8\西門子3508\3508呼死你\uartnews.h
(0001)
(0002) void ReDial(void);
(0003) /**************************************************
(0004) *原型:void InitUART( unsigned char baudrate )
(0005) *功能:串口初始化,19.2k,一個字節520.8US
(0006) *參數:unsigned char baudrat
(0007) *返回:無
(0008) **************************************************/
(0009) void InitUART( unsigned char baudrate )
(0010) {
(0011) UBRR = baudrate; //19.2k
_InitUART:
baudrate --> R16
00D0 B909 OUT 0x09,R16
(0012) UCSRB = ( (1<<RXCIE) | (1<<RXEN) | (1<<TXEN) );//接收中斷開,接收口開,發送口開
00D1 E988 LDI R24,0x98
00D2 B98A OUT 0x0A,R24
(0013) UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);//8位數據+1位STOP位
00D3 E886 LDI R24,0x86
00D4 BD80 OUT 0x20,R24
00D5 9508 RET
(0014) }
(0015) /*************************************************
(0016) *原型:void UART_TX_interrupt(void)
(0017) *功能:初始化,執行任務
(0018) *說明:無
(0019) *參數:無
(0020) *返回:無
(0021) **************************************************/
(0022) /* 字符輸出函數 */
(0023) void putchar(unsigned char c)
(0024) {
(0025) while (!GET_BIT(UCSRA,UDRE)) ;
_putchar:
c --> R16
00D6 9B5D SBIS 0x0B,5
00D7 CFFE RJMP _putchar
(0026)
(0027) UDR=c;
00D8 B90C OUT 0x0C,R16
00D9 9508 RET
_puts:
s --> R20
00DA D2E1 RCALL push_gset1
00DB 01A8 MOVW R20,R16
(0028) }
(0029)
(0030) /* 字符串輸出函數 */
(0031) void puts(char *s)
(0032) {
00DC C005 RJMP 0x00E2
(0033) while (*s)
(0034) {
(0035) putchar(*s);
00DD 01FA MOVW R30,R20
00DE 8100 LDD R16,Z+0
00DF DFF6 RCALL _putchar
(0036) s++;
00E0 5F4F SUBI R20,0xFF
00E1 4F5F SBCI R21,0xFF
00E2 01FA MOVW R30,R20
00E3 8020 LDD R2,Z+0
00E4 2022 TST R2
00E5 F7B9 BNE 0x00DD
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -