📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_TimeBCD_V::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.dbsym e TimeBCD_V _TimeBCD_V A[2:2]c
_TimeBCD_H::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.dbsym e TimeBCD_H _TimeBCD_H A[2:2]c
.area lit(rom, con, rel)
_SegTable::
.byte 126,96
.byte 61,'y
.byte 'c,91
.byte 95,'p
.byte 127,123
.dbsym e SegTable _SegTable A[10:10]kc
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.dbfunc e System_Init _System_Init fV
.even
_System_Init::
.dbline -1
.dbline 28
; #include "iom16v.h"
; #include "DataType.h"
; #include "app.h"
;
; #define cSelfTestMode 0
; #define cNormalMode 1
;
; #define cTraffic_V 0
; #define cTraffic_H 1
;
; #define cReserved 0
; #define cForbidden 1
; #define cBuffer1 2
; #define cAllow 3
; #define cBuffer2 4
;
; INT8U ControllerMode;
; INT8U TrafficStatus_V;
; INT8U TrafficStatus_H;
; INT8U Time_V;
; INT8U Time_H;
; INT8U TimeBCD_V[2] = {0,0};
; INT8U TimeBCD_H[2] = {0,0};
;
; const INT8U SegTable[] = {0x7E,0x60,0x3D,0x79,0x63,0x5B,0x5F,0x70,0x7F,0x7B};
;
; void System_Init(void)
; {
.dbline 29
; ControllerMode = cSelfTestMode;
clr R2
sts _ControllerMode,R2
.dbline 30
; TrafficStatus_V = cReserved;
sts _TrafficStatus_V,R2
.dbline 31
; TrafficStatus_H = cReserved;
sts _TrafficStatus_H,R2
.dbline 32
; Time_V = 0;
sts _Time_V,R2
.dbline 33
; Time_H = 0;
sts _Time_H,R2
.dbline -2
.dbline 34
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SetTrafficStatus _SetTrafficStatus fV
; Status -> R20
; Index -> R22
.even
_SetTrafficStatus::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 37
;
; void SetTrafficStatus(INT8U Index,INT8U Status)
; {
.dbline 38
; if(Index == cTraffic_V)
tst R22
breq X0
xjmp L3
X0:
.dbline 39
; {
.dbline 40
; TrafficStatus_V = Status;
sts _TrafficStatus_V,R20
.dbline 41
; if(Status == cAllow)
cpi R20,3
brne L5
.dbline 42
; {
.dbline 43
; LED_ON_OFF(cR_LED_V,cLED_OFF);
clr R18
clr R16
xcall _LED_ON_OFF
.dbline 44
; LED_ON_OFF(cG_LED_V,cLED_ON);
ldi R18,1
ldi R16,2
xcall _LED_ON_OFF
.dbline 45
; LED_ON_OFF(cY_LED_V,cLED_OFF);
clr R18
ldi R16,1
xcall _LED_ON_OFF
.dbline 46
; Time_V = 30;
ldi R24,30
sts _Time_V,R24
.dbline 47
; }
xjmp L4
L5:
.dbline 48
; else if((Status == cBuffer1) || (Status == cBuffer2))
cpi R20,2
breq L9
cpi R20,4
brne L7
L9:
.dbline 49
; {
.dbline 50
; LED_ON_OFF(cR_LED_V,cLED_OFF);
clr R18
clr R16
xcall _LED_ON_OFF
.dbline 51
; LED_ON_OFF(cG_LED_V,cLED_OFF);
clr R18
ldi R16,2
xcall _LED_ON_OFF
.dbline 52
; LED_ON_OFF(cY_LED_V,cLED_ON);
ldi R18,1
ldi R16,1
xcall _LED_ON_OFF
.dbline 53
; Time_V = 5;
ldi R24,5
sts _Time_V,R24
.dbline 54
; }
xjmp L4
L7:
.dbline 55
; else if(Status == cForbidden)
cpi R20,1
breq X1
xjmp L4
X1:
.dbline 56
; {
.dbline 57
; LED_ON_OFF(cR_LED_V,cLED_ON);
ldi R18,1
clr R16
xcall _LED_ON_OFF
.dbline 58
; LED_ON_OFF(cG_LED_V,cLED_OFF);
clr R18
ldi R16,2
xcall _LED_ON_OFF
.dbline 59
; LED_ON_OFF(cY_LED_V,cLED_OFF);
clr R18
ldi R16,1
xcall _LED_ON_OFF
.dbline 60
; Time_V = 30;
ldi R24,30
sts _Time_V,R24
.dbline 61
; }
.dbline 62
; }
xjmp L4
L3:
.dbline 63
; else if(Index == cTraffic_H)
cpi R22,1
brne L12
.dbline 64
; {
.dbline 65
; TrafficStatus_H = Status;
sts _TrafficStatus_H,R20
.dbline 66
; if(Status == cAllow)
cpi R20,3
brne L14
.dbline 67
; {
.dbline 68
; LED_ON_OFF(cR_LED_H,cLED_OFF);
clr R18
ldi R16,3
xcall _LED_ON_OFF
.dbline 69
; LED_ON_OFF(cG_LED_H,cLED_ON);
ldi R18,1
ldi R16,5
xcall _LED_ON_OFF
.dbline 70
; LED_ON_OFF(cY_LED_H,cLED_OFF);
clr R18
ldi R16,4
xcall _LED_ON_OFF
.dbline 71
; Time_H = 30;
ldi R24,30
sts _Time_H,R24
.dbline 72
; }
xjmp L15
L14:
.dbline 73
; else if((Status == cBuffer1) || (Status == cBuffer2))
cpi R20,2
breq L18
cpi R20,4
brne L16
L18:
.dbline 74
; {
.dbline 75
; LED_ON_OFF(cR_LED_H,cLED_OFF);
clr R18
ldi R16,3
xcall _LED_ON_OFF
.dbline 76
; LED_ON_OFF(cG_LED_H,cLED_OFF);
clr R18
ldi R16,5
xcall _LED_ON_OFF
.dbline 77
; LED_ON_OFF(cY_LED_H,cLED_ON);
ldi R18,1
ldi R16,4
xcall _LED_ON_OFF
.dbline 78
; Time_H = 5;
ldi R24,5
sts _Time_H,R24
.dbline 79
; }
xjmp L17
L16:
.dbline 80
; else if(Status == cForbidden)
cpi R20,1
brne L19
.dbline 81
; {
.dbline 82
; LED_ON_OFF(cR_LED_H,cLED_ON);
ldi R18,1
ldi R16,3
xcall _LED_ON_OFF
.dbline 83
; LED_ON_OFF(cG_LED_H,cLED_OFF);
clr R18
ldi R16,5
xcall _LED_ON_OFF
.dbline 84
; LED_ON_OFF(cY_LED_H,cLED_OFF);
clr R18
ldi R16,4
xcall _LED_ON_OFF
.dbline 85
; Time_H = 30;
ldi R24,30
sts _Time_H,R24
.dbline 86
; }
L19:
L17:
L15:
.dbline 87
; }
L12:
L4:
.dbline -2
.dbline 88
; }
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Status 20 c
.dbsym r Index 22 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 91
;
; void main(void)
; {
.dbline 92
; Hardware_Init();
xcall _Hardware_Init
.dbline 93
; System_Init();
xcall _System_Init
L22:
.dbline 95
.dbline 96
.dbline 97
L23:
.dbline 94
xjmp L22
X2:
.dbline -2
.dbline 98
; while(1)
; {
; ;
; }
; }
L21:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 76
jmp _Timer0_Interrupt
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
L26:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.dbfunc e Timer0_Interrupt _Timer0_Interrupt fV
.dbsym s TimeCount L26 c
.even
_Timer0_Interrupt::
xcall push_lset
.dbline -1
.dbline 102
;
; #pragma interrupt_handler Timer0_Interrupt:20
; void Timer0_Interrupt(void)
; {
.dbline 105
; static INT8U TimeCount = 0;
; //Clear Timer0 OCIF Flag
; TIFR |= 0x02;
in R24,0x38
ori R24,2
out 0x38,R24
.dbline 106
; TCNT0 = 0x00;
clr R2
out 0x32,R2
.dbline 107
; if(ControllerMode == cNormalMode)
lds R24,_ControllerMode
cpi R24,1
breq X3
xjmp L27
X3:
.dbline 108
; {
.dbline 109
; INT2BCD(Time_V,TimeBCD_V);
ldi R18,<_TimeBCD_V
ldi R19,>_TimeBCD_V
lds R16,_Time_V
xcall _INT2BCD
.dbline 110
; INT2BCD(Time_H,TimeBCD_H);
ldi R18,<_TimeBCD_H
ldi R19,>_TimeBCD_H
lds R16,_Time_H
xcall _INT2BCD
.dbline 111
; if(TimeCount == 0)
lds R2,L26
tst R2
brne L29
.dbline 112
; {
.dbline 113
; mSet_Data_V(DataConvert(TimeBCD_V[0]));
lds R16,_TimeBCD_V
xcall _DataConvert
out 0x1b,R16
.dbline 114
; mSet_Data_H(DataConvert(TimeBCD_H[0]));
lds R16,_TimeBCD_H
xcall _DataConvert
out 0x12,R16
.dbline 115
; mSelect_V0();
in R24,0x18
ori R24,48
andi R24,239
out 0x18,R24
.dbline 116
; mSelect_H0();
in R24,0x18
ori R24,192
andi R24,191
out 0x18,R24
.dbline 117
; TimeCount = 1;
ldi R24,1
sts L26,R24
.dbline 118
; }
xjmp L30
L29:
.dbline 119
; else if(TimeCount == 1)
lds R24,L26
cpi R24,1
brne L31
.dbline 120
; {
.dbline 121
; mSet_Data_V(DataConvert(TimeBCD_V[1]));
lds R16,_TimeBCD_V+1
xcall _DataConvert
out 0x1b,R16
.dbline 122
; mSet_Data_H(DataConvert(TimeBCD_H[1]));
lds R16,_TimeBCD_H+1
xcall _DataConvert
out 0x12,R16
.dbline 123
; mSelect_V1();
in R24,0x18
ori R24,48
andi R24,223
out 0x18,R24
.dbline 124
; mSelect_H1();
in R24,0x18
ori R24,192
andi R24,127
out 0x18,R24
.dbline 125
; TimeCount = 0;
clr R2
sts L26,R2
.dbline 126
; }
L31:
L30:
.dbline 127
L27:
.dbline -2
.dbline 128
; }
; }
L25:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 24
jmp _Timer1_Interrupt
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
L36:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\交通灯控制系统设计\main.c
.dbfunc e Timer1_Interrupt _Timer1_Interrupt fV
.dbsym s TimeCount L36 c
.even
_Timer1_Interrupt::
xcall push_lset
.dbline -1
.dbline 132
;
; #pragma interrupt_handler Timer1_Interrupt:7
; void Timer1_Interrupt(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -