📄 mainok.s
字号:
.module mainok.c
.area data(ram, con, rel)
_num::
.blkb 2
.area idata
.byte 63,6
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 91,'O
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 'f,'m
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 125,39
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 127,'o
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,0
.area data(ram, con, rel)
.dbfile D:\教学\2008bishe\avrprog\mainok.c
.dbsym e num _num A[12:12]c
_temp::
.blkb 2
.area idata
.byte 30,35
.area data(ram, con, rel)
.dbfile D:\教学\2008bishe\avrprog\mainok.c
.blkb 2
.area idata
.byte 40,45
.area data(ram, con, rel)
.dbfile D:\教学\2008bishe\avrprog\mainok.c
.dbsym e temp _temp A[4:4]c
.area text(rom, con, rel)
.dbfile D:\教学\2008bishe\avrprog\mainok.c
.dbfunc e delay _delay fV
; dt -> R16,R17
.even
_delay::
.dbline -1
.dbline 50
; /***************************************/
; /* 使用内部震荡,设置4mhz */
; /****************************************/
; //2007.12---xieming
; // 1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
; // 2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
; // 通信波特率为19200(Tools->Environment Options...)。
; // 3、将PC屏幕光标定位于调试窗口中
; #include "iom8v.h"
; #include "macros.h"
; #define osccal 0x7d
; //内部RC校正常数
; #define Vref 500//参考电压值
;
; unsigned int adc_rel;//AD转换结果
; unsigned char adc_mux;//AD通道
;
; #define set_bit(x,y) (x|=(1<<y))
; #define clr_bit(x,y) (x&=~(1<<y))
;
; //PORT B
; #define OUT1 5
; #define OUT2 4
;
; unsigned int disnm,smode;
; unsigned char dis[4];
; unsigned char num[12]={
; 0x3f,//------------------0
; 0x06,//------------------1
; 0x5b,//------------------2
; 0x4f,//------------------3
; 0x66,//------------------4
; 0x6d,//------------------5
; 0x7d,//------------------6
; 0x27,//------------------7
; 0x7f,//------------------8
; 0x6f,//------------------9
; 0xff,//------------------8.
; 0x00//-------------------none
; };
;
;
; unsigned char temp[4]={30,35,40,45};
;
; unsigned char sd,su,se,sm;
;
;
;
; void delay(int dt) //delay=(0.95dt+1.76)us
; {while(dt)
rjmp L3
L2:
.dbline 51
.dbline 51
subi R16,1
sbci R17,0
.dbline 52
nop
.dbline 53
nop
.dbline 54
nop
.dbline 55
L3:
.dbline 50
cpi R16,0
cpc R16,R17
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r dt 16 I
.dbend
.dbfunc e display _display fV
; i -> R20
.even
_display::
rcall push_gset1
.dbline -1
.dbline 58
; {dt--;
; asm("nop");
; asm("nop");
; asm("nop");
; }
; }
; void display(void)
; {unsigned char i;
.dbline 60
;
; for(i=0;i<4;i++)
clr R20
rjmp L9
L6:
.dbline 61
.dbline 61
ldi R16,1
mov R17,R20
rcall lsl8
mov R2,R16
com R2
in R3,0x12
and R3,R2
out 0x12,R3
.dbline 62
ldi R24,<_dis
ldi R25,>_dis
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R30,z+0
clr R31
ldi R24,<_num
ldi R25,>_num
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x18,R2
.dbline 63
ldi R16,10
ldi R17,0
rcall _delay
.dbline 64
ldi R16,1
mov R17,R20
rcall lsl8
in R2,0x12
or R2,R16
out 0x12,R2
.dbline 65
L7:
.dbline 60
inc R20
L9:
.dbline 60
cpi R20,4
brlo L6
.dbline -2
L5:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e keyscan _keyscan fc
; tp -> R22
; keyst -> R20
.even
_keyscan::
rcall push_gset2
.dbline -1
.dbline 70
; { clr_bit(PORTD,i);
; PORTB=num[dis[i]];
; delay(10);
; set_bit(PORTD,i);
; }
;
; }
;
; unsigned char keyscan(void)
; { unsigned char keyst,tp;
.dbline 71
; keyst=PINC;
in R20,0x13
.dbline 72
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 73
; tp=PINC;
in R22,0x13
.dbline 74
; if(tp!=keyst) return 0;
cp R22,R20
breq L11
.dbline 74
clr R16
rjmp L10
L11:
.dbline 75
; keyst=keyst&0x0f;
andi R20,15
.dbline 76
; if(keyst==0x0f)
cpi R20,15
brne L13
.dbline 77
; {sd=0;su=0;se=0;sm=0;
.dbline 77
clr R2
sts _sd,R2
.dbline 77
sts _su,R2
.dbline 77
sts _se,R2
.dbline 77
sts _sm,R2
.dbline 78
; return 0;//no button
clr R16
rjmp L10
L13:
.dbline 81
.dbline 81
lds R2,_sd
tst R2
brne L19
lds R2,_se
tst R2
brne L19
lds R2,_su
tst R2
brne L19
lds R2,_sm
tst R2
breq L15
L19:
.dbline 81
; }
; else
; {if(sd||se||su||sm) return 0;
clr R16
rjmp L10
L15:
.dbline 82
; if((keyst&1)==0) {sd=1;return 1;} //down
sbrc R20,0
rjmp L20
.dbline 82
.dbline 82
ldi R24,1
sts _sd,R24
.dbline 82
ldi R16,1
rjmp L10
L20:
.dbline 83
; else if((keyst&2)==0) {su=1;return 2;}//up
sbrc R20,1
rjmp L22
.dbline 83
.dbline 83
ldi R24,1
sts _su,R24
.dbline 83
ldi R16,2
rjmp L10
L22:
.dbline 84
; else if((keyst&4)==0) {se=1;return 3;}//enter
sbrc R20,2
rjmp L24
.dbline 84
.dbline 84
ldi R24,1
sts _se,R24
.dbline 84
ldi R16,3
rjmp L10
L24:
.dbline 85
; else if((keyst&8)==0) {sm=1;return 4;}//mode
sbrc R20,3
rjmp L26
.dbline 85
.dbline 85
ldi R24,1
sts _sm,R24
.dbline 85
ldi R16,4
L26:
.dbline 86
; }
.dbline -2
L10:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r tp 22 c
.dbsym r keyst 20 c
.dbend
.dbfunc e main _main fV
; j -> <dead>
; i -> R20,R21
; keynm -> R22,R23
.even
_main::
.dbline -1
.dbline 90
; }
;
; void main(void)
; {
.dbline 91
; unsigned int j,keynm,i=0;
clr R20
clr R21
.dbline 94
;
;
; DDRB=0xff;/*PORTb is outPUT PORT*/
ldi R24,255
out 0x17,R24
.dbline 95
; PORTB=0xfF;//
out 0x18,R24
.dbline 96
; DDRD=0xff; //
out 0x11,R24
.dbline 97
; PORTD=0x3f; //
ldi R24,63
out 0x12,R24
.dbline 99
;
; DDRC=0x00;/* input */
clr R2
out 0x14,R2
.dbline 100
; PORTC=0x0f;/* pullup enable */
ldi R24,15
out 0x15,R24
rjmp L30
L29:
.dbline 104
;
;
; while(1)
; {
.dbline 111
;
;
; //dis[0]=11;dis[1]=11;dis[2]=11;dis[3]=11;
;
;
;
; keynm=keyscan();
rcall _keyscan
mov R22,R16
clr R23
.dbline 112
; if(keynm==4)//set mode
cpi R22,4
ldi R30,0
cpc R23,R30
brne L32
.dbline 113
; {smode=smode+1;
.dbline 113
lds R24,_smode
lds R25,_smode+1
adiw R24,1
sts _smode+1,R25
sts _smode,R24
.dbline 114
; if(smode==5) smode=1;
cpi R24,5
ldi R30,0
cpc R25,R30
brne L34
.dbline 114
ldi R24,1
ldi R25,0
sts _smode+1,R25
sts _smode,R24
L34:
.dbline 115
; dis[3]=4;
ldi R24,4
sts _dis+3,R24
.dbline 116
; display();
rcall _display
.dbline 117
; }
rjmp L33
L32:
.dbline 118
; else if(keynm==3)//enter
cpi R22,3
ldi R30,0
cpc R23,R30
brne L37
.dbline 119
; {smode=0;
.dbline 119
clr R2
clr R3
sts _smode+1,R3
sts _smode,R2
.dbline 121
; //save set value
; }
L37:
L33:
.dbline 123
;
; if(smode)
lds R2,_smode
lds R3,_smode+1
tst R2
brne X1
tst R3
brne X4
rjmp L39
X4:
X1:
.dbline 124
; {i=smode-1;
.dbline 124
lds R20,_smode
lds R21,_smode+1
subi R20,1
sbci R21,0
.dbline 125
; switch(keynm)
cpi R22,1
ldi R30,0
cpc R23,R30
brne X5
rjmp L64
X5:
cpi R22,2
ldi R30,0
cpc R23,R30
breq L43
rjmp L42
X2:
.dbline 126
; {case 2:
L43:
.dbline 127
; temp[i]++;
ldi R24,<_temp
ldi R25,>_temp
movw R2,R20
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
subi R24,255 ; addi 1
std z+0,R24
.dbline 128
; if(temp[0]==temp[1])temp[0]=temp[1]-1;
lds R2,_temp+1
lds R3,_temp
cp R3,R2
brne L44
.dbline 128
mov R24,R2
subi R24,1
sts _temp,R24
L44:
.dbline 129
; if(temp[1]==temp[2])temp[1]=temp[2]-1;
lds R2,_temp+2
lds R3,_temp+1
cp R3,R2
brne L48
.dbline 129
mov R24,R2
subi R24,1
sts _temp+1,R24
L48:
.dbline 130
; if(temp[2]==temp[3])temp[2]=temp[3]-1;
lds R2,_temp+3
lds R3,_temp+2
cp R3,R2
brne L54
.dbline 130
mov R24,R2
subi R24,1
sts _temp+2,R24
L54:
.dbline 131
; if(temp[3]==99)temp[3]=98;
lds R24,_temp+3
cpi R24,99
breq X6
rjmp L42
X6:
.dbline 131
ldi R24,98
sts _temp+3,R24
.dbline 132
; break;
rjmp L42
L64:
.dbline 135
;
; case 1:
; temp[i]--;
ldi R24,<_temp
ldi R25,>_temp
movw R2,R20
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
subi R24,1
std z+0,R24
.dbline 136
; if(temp[0]==0)temp[0]=1;
lds R2,_temp
tst R2
brne L65
.dbline 136
ldi R24,1
sts _temp,R24
L65:
.dbline 137
; if(temp[1]==temp[0])temp[1]=temp[0]+1;
lds R2,_temp
lds R3,_temp+1
cp R3,R2
brne L67
.dbline 137
mov R24,R2
subi R24,255 ; addi 1
sts _temp+1,R24
L67:
.dbline 138
; if(temp[2]==temp[1])temp[2]=temp[1]+1;
lds R2,_temp+1
lds R3,_temp+2
cp R3,R2
brne L71
.dbline 138
mov R24,R2
subi R24,255 ; addi 1
sts _temp+2,R24
L71:
.dbline 139
; if(temp[3]==temp[2])temp[3]=temp[2]+1;
lds R2,_temp+2
lds R3,_temp+3
cp R3,R2
brne L42
.dbline 139
mov R24,R2
subi R24,255 ; addi 1
sts _temp+3,R24
.dbline 140
; break;
.dbline 141
; default:break;
L42:
.dbline 143
; }
; dis[0]=smode;dis[1]=11;
lds R2,_smode
lds R3,_smode+1
sts _dis,R2
.dbline 143
ldi R24,11
sts _dis+1,R24
.dbline 144
; dis[2]=temp[i]/10;
ldi R24,<_temp
ldi R25,>_temp
movw R30,R20
add R30,R24
adc R31,R25
ldd R16,z+0
ldi R17,10
rcall div8u
sts _dis+2,R16
.dbline 145
; dis[3]=temp[i]%10;
ldi R24,<_temp
ldi R25,>_temp
movw R30,R20
add R30,R24
adc R31,R25
ldd R16,z+0
ldi R17,10
rcall mod8u
sts _dis+3,R16
.dbline 146
; display();
rcall _display
.dbline 147
; }
rjmp L40
L39:
.dbline 149
; else
; {
.dbline 152
; //disnm=ADC;
; //disnm=ADC;
; dis[0]=disnm/1000;
ldi R18,1000
ldi R19,3
lds R16,_disnm
lds R17,_disnm+1
rcall div16u
sts _dis,R16
.dbline 153
; dis[1]=disnm/100;dis[1]=dis[1]%10;
ldi R18,100
ldi R19,0
lds R16,_disnm
lds R17,_disnm+1
rcall div16u
sts _dis+1,R16
.dbline 153
ldi R17,10
rcall mod8u
sts _dis+1,R16
.dbline 154
; dis[2]=disnm/10;dis[2]=dis[2]%10;
ldi R18,10
ldi R19,0
lds R16,_disnm
lds R17,_disnm+1
rcall div16u
sts _dis+2,R16
.dbline 154
ldi R17,10
rcall mod8u
sts _dis+2,R16
.dbline 155
; dis[3]=disnm%10;
ldi R18,10
ldi R19,0
lds R16,_disnm
lds R17,_disnm+1
rcall mod16u
sts _dis+3,R16
.dbline 157
;
; display();
rcall _display
.dbline 158
; }
L40:
.dbline 159
L30:
.dbline 103
rjmp L29
X3:
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbsym l j 1 i
.dbsym r i 20 i
.dbsym r keynm 22 i
.dbend
.area bss(ram, con, rel)
.dbfile D:\教学\2008bishe\avrprog\mainok.c
_sm::
.blkb 1
.dbsym e sm _sm c
_se::
.blkb 1
.dbsym e se _se c
_su::
.blkb 1
.dbsym e su _su c
_sd::
.blkb 1
.dbsym e sd _sd c
_dis::
.blkb 4
.dbsym e dis _dis A[4:4]c
_smode::
.blkb 2
.dbsym e smode _smode i
_disnm::
.blkb 2
.dbsym e disnm _disnm i
_adc_mux::
.blkb 1
.dbsym e adc_mux _adc_mux c
_adc_rel::
.blkb 2
.dbsym e adc_rel _adc_rel i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -