📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile C:\avr3\main.c
.dbfunc e main _main fV
; x -> R20
.even
_main::
.dbline -1
.dbline 7
; #include"main.h"
; extern void keysy(void);
;
;
; /*===============主函数部分===================*/
; void main(void)
; {
.dbline 20
clr R20
rjmp L5
L2:
.dbline 20
ldi R24,<_LCD
ldi R25,>_LCD
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,255
std z+0,R24
L3:
.dbline 20
inc R20
L5:
.dbline 20
; // unsigned int i;
; unsigned char x ;
; /*===============初始化函数============*/
; // init_1622();
; /*
; ======================================
; 采用定时器管理
; 定时器0预分频系数为1024,定时时间为1.25MS
; 初值为=256-1.25*14.7456*1000000/1024/1000=238
; 首先要开启定时器0,
; =========================================
; */
; for(x=0;x<23;x++) LCD[x]=0XFF;
cpi R20,23
brlo L2
.dbline 22
;
; TCCR0=0X05; //预分频系数为1024 0000 0101
ldi R24,5
out 0x33,R24
.dbline 23
; TCNT0=0XEE; //238
ldi R24,238
out 0x32,R24
.dbline 24
; TIMSK|=0X01; //使能T/C0中断,允许中断
in R24,0x39
ori R24,1
out 0x39,R24
.dbline 26
;
; DDRD&=0XF3; //PIND2 PIND3设为输入
in R24,0x11
andi R24,243
out 0x11,R24
.dbline 27
; MCUCR=0X08; //00001000下降沿触发中断、GICR
ldi R24,8
out 0x35,R24
.dbline 35
; //ISC11,ISC10 INT1下降沿
;
; /*========PB2输出PWM信号WGM[3;0]=1011
; ========加一计数中比较匹配时清零OC1B
; ========减一计数中比较匹配时置位
; ========CS12,CS11,CS10=010,表示8预分频计时器
; */
; DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
in R24,0x17
ori R24,62
out 0x17,R24
.dbline 36
; TCCR1A=0X63; //0110 0011
ldi R24,99
out 0x2f,R24
.dbline 37
; TCCR1B=0X12; //0001 0010
ldi R24,18
out 0x2e,R24
.dbline 38
; OCR1A=0x61A7; //设置TOP值为1249
ldi R24,24999
ldi R25,97
out 0x2b,R25
out 0x2a,R24
.dbline 39
; OCR1B=2500; //比较匹配值
ldi R24,2500
ldi R25,9
out 0x29,R25
out 0x28,R24
.dbline 41
;
; SREG =0X80; //使能总中断
ldi R24,128
out 0x3f,R24
.dbline 42
; MBZ=0;
clr R2
sts _MBZ,R2
rjmp L7
L6:
.dbline 44
; while(1)
; {
.dbline 45
; keysy();
rcall _keysy
.dbline 46
; DDRD|=BIT(PD7); //PD7设为输出
sbi 0x11,7
.dbline 47
; DDRD|=BIT(PD6);
sbi 0x11,6
.dbline 48
; if(MBZ==0)
lds R2,_MBZ
tst R2
brne L9
.dbline 49
; {
.dbline 50
; LED_LIANG; //PD7为1,点亮LED指示灯
sbi 0x12,7
.dbline 51
; }
L9:
.dbline 52
; if(MBZ==1)
lds R24,_MBZ
cpi R24,1
brne L11
.dbline 53
; {
.dbline 54
; LED_MIE;
cbi 0x12,7
.dbline 55
; BIT_80|=0x80;//a.BEEP1=1;
lds R24,_BIT_80
ori R24,128
sts _BIT_80,R24
.dbline 56
; }
L11:
.dbline 57
L7:
.dbline 43
rjmp L6
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\avr3\main.c
_TMS::
.blkb 2
.dbfile C:\avr3/main.h
.dbsym e TMS _TMS i
_BIT_80::
.blkb 1
.dbsym e BIT_80 _BIT_80 c
_CHW::
.blkb 1
.dbsym e CHW _CHW c
_KEY::
.blkb 1
.dbsym e KEY _KEY c
_KKEY_n::
.blkb 14
.dbsym e KKEY_n _KKEY_n A[14:14]c
_LCD::
.blkb 23
.dbsym e LCD _LCD A[23:23]c
_VARIA_BIT::
.blkb 1
.dbsym e VARIA_BIT _VARIA_BIT c
_MBZ::
.blkb 1
.dbsym e MBZ _MBZ c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -