📄 project.lst
字号:
__text_start:
__start:
0032 E5CF LDI R28,0x5F
0033 E0D4 LDI R29,4
0034 BFCD OUT 0x3D,R28
0035 BFDE OUT 0x3E,R29
0036 51C0 SUBI R28,0x10
0037 40D0 SBCI R29,0
0038 EA0A LDI R16,0xAA
0039 8308 STD Y+0,R16
003A 2400 CLR R0
003B E6E6 LDI R30,0x66
003C E0F0 LDI R31,0
003D E010 LDI R17,0
003E 36EB CPI R30,0x6B
003F 07F1 CPC R31,R17
0040 F011 BEQ 0x0043
0041 9201 ST R0,Z+
0042 CFFB RJMP 0x003E
0043 8300 STD Z+0,R16
0044 E5EE LDI R30,0x5E
0045 E0F0 LDI R31,0
0046 E6A0 LDI R26,0x60
0047 E0B0 LDI R27,0
0048 E010 LDI R17,0
0049 36E4 CPI R30,0x64
004A 07F1 CPC R31,R17
004B F021 BEQ 0x0050
004C 95C8 LPM
004D 9631 ADIW R30,1
004E 920D ST R0,X+
004F CFF9 RJMP 0x0049
0050 940E00DF CALL _main
_exit:
0052 CFFF RJMP _exit
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
(0001) #include "iom16v.h"
(0002) #include "DataType.h"
(0003) #include "app.h"
(0004)
(0005) #define cSelfTestMode 0
(0006) #define cNormalMode 1
(0007)
(0008) #define cTraffic_V 0
(0009) #define cTraffic_H 1
(0010)
(0011) #define cReserved 0
(0012) #define cForbidden 1
(0013) #define cBuffer1 2
(0014) #define cAllow 3
(0015) #define cBuffer2 4
(0016)
(0017) INT8U ControllerMode;
(0018) INT8U TrafficStatus_V;
(0019) INT8U TrafficStatus_H;
(0020) INT8U Time_V;
(0021) INT8U Time_H;
(0022) INT8U TimeBCD_V[2] = {0,0};
(0023) INT8U TimeBCD_H[2] = {0,0};
(0024)
(0025) const INT8U SegTable[] = {0x7E,0x60,0x3D,0x79,0x63,0x5B,0x5F,0x70,0x7F,0x7B};
(0026)
(0027) void System_Init(void)
(0028) {
(0029) ControllerMode = cSelfTestMode;
_System_Init:
0053 2422 CLR R2
0054 9220006A STS _ControllerMode,R2
(0030) TrafficStatus_V = cReserved;
0056 92200069 STS _TrafficStatus_V,R2
(0031) TrafficStatus_H = cReserved;
0058 92200068 STS _TrafficStatus_H,R2
(0032) Time_V = 0;
005A 92200067 STS _Time_V,R2
(0033) Time_H = 0;
005C 92200066 STS _Time_H,R2
(0034) }
005E 9508 RET
_SetTrafficStatus:
Status --> R20
Index --> R22
005F 940E02E8 CALL push_gset2
0061 2F42 MOV R20,R18
0062 2F60 MOV R22,R16
(0035)
(0036) void SetTrafficStatus(INT8U Index,INT8U Status)
(0037) {
(0038) if(Index == cTraffic_V)
0063 2366 TST R22
0064 F009 BEQ 0x0066
0065 C03B RJMP 0x00A1
(0039) {
(0040) TrafficStatus_V = Status;
0066 93400069 STS _TrafficStatus_V,R20
(0041) if(Status == cAllow)
0068 3043 CPI R20,3
0069 F481 BNE 0x007A
(0042) {
(0043) LED_ON_OFF(cR_LED_V,cLED_OFF);
006A 2722 CLR R18
006B 2700 CLR R16
006C 940E027B CALL _LED_ON_OFF
(0044) LED_ON_OFF(cG_LED_V,cLED_ON);
006E E021 LDI R18,1
006F E002 LDI R16,2
0070 940E027B CALL _LED_ON_OFF
(0045) LED_ON_OFF(cY_LED_V,cLED_OFF);
0072 2722 CLR R18
0073 E001 LDI R16,1
0074 940E027B CALL _LED_ON_OFF
(0046) Time_V = 30;
0076 E18E LDI R24,0x1E
0077 93800067 STS _Time_V,R24
(0047) }
0079 C062 RJMP 0x00DC
(0048) else if((Status == cBuffer1) || (Status == cBuffer2))
007A 3042 CPI R20,2
007B F011 BEQ 0x007E
007C 3044 CPI R20,4
007D F481 BNE 0x008E
(0049) {
(0050) LED_ON_OFF(cR_LED_V,cLED_OFF);
007E 2722 CLR R18
007F 2700 CLR R16
0080 940E027B CALL _LED_ON_OFF
(0051) LED_ON_OFF(cG_LED_V,cLED_OFF);
0082 2722 CLR R18
0083 E002 LDI R16,2
0084 940E027B CALL _LED_ON_OFF
(0052) LED_ON_OFF(cY_LED_V,cLED_ON);
0086 E021 LDI R18,1
0087 E001 LDI R16,1
0088 940E027B CALL _LED_ON_OFF
(0053) Time_V = 5;
008A E085 LDI R24,5
008B 93800067 STS _Time_V,R24
(0054) }
008D C04E RJMP 0x00DC
(0055) else if(Status == cForbidden)
008E 3041 CPI R20,1
008F F009 BEQ 0x0091
0090 C04B RJMP 0x00DC
(0056) {
(0057) LED_ON_OFF(cR_LED_V,cLED_ON);
0091 E021 LDI R18,1
0092 2700 CLR R16
0093 940E027B CALL _LED_ON_OFF
(0058) LED_ON_OFF(cG_LED_V,cLED_OFF);
0095 2722 CLR R18
0096 E002 LDI R16,2
0097 940E027B CALL _LED_ON_OFF
(0059) LED_ON_OFF(cY_LED_V,cLED_OFF);
0099 2722 CLR R18
009A E001 LDI R16,1
009B 940E027B CALL _LED_ON_OFF
(0060) Time_V = 30;
009D E18E LDI R24,0x1E
009E 93800067 STS _Time_V,R24
(0061) }
(0062) }
00A0 C03B RJMP 0x00DC
(0063) else if(Index == cTraffic_H)
00A1 3061 CPI R22,1
00A2 F5C9 BNE 0x00DC
(0064) {
(0065) TrafficStatus_H = Status;
00A3 93400068 STS _TrafficStatus_H,R20
(0066) if(Status == cAllow)
00A5 3043 CPI R20,3
00A6 F481 BNE 0x00B7
(0067) {
(0068) LED_ON_OFF(cR_LED_H,cLED_OFF);
00A7 2722 CLR R18
00A8 E003 LDI R16,3
00A9 940E027B CALL _LED_ON_OFF
(0069) LED_ON_OFF(cG_LED_H,cLED_ON);
00AB E021 LDI R18,1
00AC E005 LDI R16,5
00AD 940E027B CALL _LED_ON_OFF
(0070) LED_ON_OFF(cY_LED_H,cLED_OFF);
00AF 2722 CLR R18
00B0 E004 LDI R16,4
00B1 940E027B CALL _LED_ON_OFF
(0071) Time_H = 30;
00B3 E18E LDI R24,0x1E
00B4 93800066 STS _Time_H,R24
(0072) }
00B6 C025 RJMP 0x00DC
(0073) else if((Status == cBuffer1) || (Status == cBuffer2))
00B7 3042 CPI R20,2
00B8 F011 BEQ 0x00BB
00B9 3044 CPI R20,4
00BA F481 BNE 0x00CB
(0074) {
(0075) LED_ON_OFF(cR_LED_H,cLED_OFF);
00BB 2722 CLR R18
00BC E003 LDI R16,3
00BD 940E027B CALL _LED_ON_OFF
(0076) LED_ON_OFF(cG_LED_H,cLED_OFF);
00BF 2722 CLR R18
00C0 E005 LDI R16,5
00C1 940E027B CALL _LED_ON_OFF
(0077) LED_ON_OFF(cY_LED_H,cLED_ON);
00C3 E021 LDI R18,1
00C4 E004 LDI R16,4
00C5 940E027B CALL _LED_ON_OFF
(0078) Time_H = 5;
00C7 E085 LDI R24,5
00C8 93800066 STS _Time_H,R24
(0079) }
00CA C011 RJMP 0x00DC
(0080) else if(Status == cForbidden)
00CB 3041 CPI R20,1
00CC F479 BNE 0x00DC
(0081) {
(0082) LED_ON_OFF(cR_LED_H,cLED_ON);
00CD E021 LDI R18,1
00CE E003 LDI R16,3
00CF 940E027B CALL _LED_ON_OFF
(0083) LED_ON_OFF(cG_LED_H,cLED_OFF);
00D1 2722 CLR R18
00D2 E005 LDI R16,5
00D3 940E027B CALL _LED_ON_OFF
(0084) LED_ON_OFF(cY_LED_H,cLED_OFF);
00D5 2722 CLR R18
00D6 E004 LDI R16,4
00D7 940E027B CALL _LED_ON_OFF
(0085) Time_H = 30;
00D9 E18E LDI R24,0x1E
00DA 93800066 STS _Time_H,R24
(0086) }
(0087) }
(0088) }
00DC 940E02CE CALL pop_gset2
00DE 9508 RET
(0089)
(0090) void main(void)
(0091) {
(0092) Hardware_Init();
_main:
00DF 940E024B CALL _Hardware_Init
(0093) System_Init();
00E1 DF71 RCALL _System_Init
(0094) while(1)
00E2 CFFF RJMP 0x00E2
(0095) {
(0096) ;
(0097) }
(0098) }
00E3 9508 RET
_Timer0_Interrupt:
00E4 940E02EC CALL push_lset
(0099)
(0100) #pragma interrupt_handler Timer0_Interrupt:20
(0101) void Timer0_Interrupt(void)
(0102) {
(0103) static INT8U TimeCount = 0;
(0104) //Clear Timer0 OCIF Flag
(0105) TIFR |= 0x02;
00E6 B788 IN R24,0x38
00E7 6082 ORI R24,2
00E8 BF88 OUT 0x38,R24
(0106) TCNT0 = 0x00;
00E9 2422 CLR R2
00EA BE22 OUT 0x32,R2
(0107) if(ControllerMode == cNormalMode)
00EB 9180006A LDS R24,_ControllerMode
00ED 3081 CPI R24,1
00EE F009 BEQ 0x00F0
00EF C03F RJMP 0x012F
(0108) {
(0109) INT2BCD(Time_V,TimeBCD_V);
00F0 E620 LDI R18,0x60
00F1 E030 LDI R19,0
00F2 91000067 LDS R16,_Time_V
00F4 940E0295 CALL _INT2BCD
(0110) INT2BCD(Time_H,TimeBCD_H);
00F6 E622 LDI R18,0x62
00F7 E030 LDI R19,0
00F8 91000066 LDS R16,_Time_H
00FA 940E0295 CALL _INT2BCD
(0111) if(TimeCount == 0)
00FC 90200064 LDS R2,__idata_end
00FE 2022 TST R2
00FF F4B1 BNE 0x0116
(0112) {
(0113) mSet_Data_V(DataConvert(TimeBCD_V[0]));
0100 91000060 LDS R16,__idata_start+2
0102 940E02A9 CALL _DataConvert
0104 BB0B OUT 0x1B,R16
(0114) mSet_Data_H(DataConvert(TimeBCD_H[0]));
0105 91000062 LDS R16,0x62
0107 940E02A9 CALL _DataConvert
0109 BB02 OUT 0x12,R16
(0115) mSelect_V0();
010A B388 IN R24,0x18
010B 6380 ORI R24,0x30
010C 7E8F ANDI R24,0xEF
010D BB88 OUT 0x18,R24
(0116) mSelect_H0();
010E B388 IN R24,0x18
010F 6C80 ORI R24,0xC0
0110 7B8F ANDI R24,0xBF
0111 BB88 OUT 0x18,R24
(0117) TimeCount = 1;
0112 E081 LDI R24,1
0113 93800064 STS __idata_end,R24
(0118) }
0115 C019 RJMP 0x012F
(0119) else if(TimeCount == 1)
0116 91800064 LDS R24,__idata_end
0118 3081 CPI R24,1
0119 F4A9 BNE 0x012F
(0120) {
(0121) mSet_Data_V(DataConvert(TimeBCD_V[1]));
011A 91000061 LDS R16,__idata_start+3
011C 940E02A9 CALL _DataConvert
011E BB0B OUT 0x1B,R16
(0122) mSet_Data_H(DataConvert(TimeBCD_H[1]));
011F 91000063 LDS R16,0x63
0121 940E02A9 CALL _DataConvert
0123 BB02 OUT 0x12,R16
(0123) mSelect_V1();
0124 B388 IN R24,0x18
0125 6380 ORI R24,0x30
0126 7D8F ANDI R24,0xDF
0127 BB88 OUT 0x18,R24
(0124) mSelect_H1();
0128 B388 IN R24,0x18
0129 6C80 ORI R24,0xC0
012A 778F ANDI R24,0x7F
012B BB88 OUT 0x18,R24
(0125) TimeCount = 0;
012C 2422 CLR R2
012D 92200064 STS __idata_end,R2
(0126) }
(0127) }
(0128) }
012F 940E0303 CALL pop_lset
0131 9518 RETI
_Timer1_Interrupt:
0132 940E02EC CALL push_lset
(0129)
(0130) #pragma interrupt_handler Timer1_Interrupt:7
(0131) void Timer1_Interrupt(void)
(0132) {
(0133) static INT8U TimeCount = 0;
(0134) //Clear Timer1 OCIF Flag
(0135) TIFR |= 0x10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -