📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
.area vector(rom, abs)
.org 24
jmp _TIMER1_OVF
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
.dbfunc e T1_Init _T1_Init fV
.even
_T1_Init::
.dbline -1
.dbline 17
; /*
; 实验七:
; 定时器T1中断实验。
; 1、定时器中断实验。定时器产生10mS周期中断,通过计数让PB1电平产生周期变化。
; 2、内部1 M晶振。
; 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。
;
; AVR mega16学习板
; www.iccavr.com
; 2006-04-03
; */
;
; #include "iom8v.h"
; #include <macros.h>
; #pragma interrupt_handler TIMER1_OVF: 7
; /*初始化定时器,产生10mS周期中断*/
; void T1_Init(void) {
.dbline 19
;
; OCR1A = 1250; //计数周期为10mS,F=1M 输出比较器OCR1A
ldi R24,1250
ldi R25,4
out 0x2b,R25
out 0x2a,R24
.dbline 20
; TIMSK |= (1 << OCIE1A); /*比较中断A允许*/
in R24,0x39
ori R24,16
out 0x39,R24
.dbline 21
; SREG = 0x80;
ldi R24,128
out 0x3f,R24
.dbline 22
; TCCR1A = 0x00; //
clr R2
out 0x2f,R2
.dbline 23
; TCCR1B = 0x08; /*定时器工作在CTC计数器模式*/
ldi R24,8
out 0x2e,R24
.dbline 24
; TCCR1B|= 0x05; /*设置定时器的分频值为8分频*/
in R24,0x2e
ori R24,5
out 0x2e,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 27
; }
; void main(void)
; {
.dbline 29
;
; DDRB = 0xFF; /*方向输出*/
ldi R24,255
out 0x17,R24
.dbline 30
; PORTB = 0xFF; /*电平设置*/
out 0x18,R24
.dbline 31
; DDRC = 0x00;
clr R2
out 0x14,R2
.dbline 32
; PORTC = 0xFF;
out 0x15,R24
.dbline 33
; DDRD = 0x00;
out 0x11,R2
.dbline 34
; PORTD = 0xFF;
out 0x12,R24
.dbline 36
;
; T1_Init();
xcall _T1_Init
.dbline 37
; SEI(); /*中断使能*/
sei
L3:
.dbline 39
;
; while (1);
L4:
.dbline 39
xjmp L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
L7:
.blkb 1
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
.dbfunc e TIMER1_OVF _TIMER1_OVF fV
.dbsym s i L7 c
.even
_TIMER1_OVF::
st -y,R2
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 45
; }
;
; /*定时器T1 TCCR1A组比较匹配中断*/
;
; void TIMER1_OVF(void)
; {
.dbline 49
;
; static unsigned char i;
;
; if (i >10)
ldi R24,10
lds R2,L7
cp R24,R2
brsh L8
X1:
.dbline 50
; {
.dbline 51
; PORTB ^= (1 << PB1);
ldi R24,2
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 52
; i = 0;
clr R2
sts L7,R2
.dbline 53
; }
xjmp L9
L8:
.dbline 55
; else
; {
.dbline 56
; i ++;
lds R24,L7
subi R24,255 ; addi 1
sts L7,R24
.dbline 57
; }
L9:
.dbline -2
L6:
.dbline 0 ; func end
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
reti
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -