⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -