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

📄 int0.s

📁 protues_atmeg8学习之:中断篇源代码
💻 S
字号:
	.module Int0.C
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\中断\Int0/Delay.h
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 3
; /******************************************/
; //文件名:Int0.c
; //功能: 外部中断的应用
	.dbline 5
; //作者:  young
; //时间: 2006.10.1
	ldi R16,1
	ldi R17,0
	rjmp L5
L2:
	.dbline 6
L3:
	.dbline 5
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 5
	cpi R16,118
	ldi R30,4
	cpc R17,R30
	brlo L2
	.dbline -2
	.dbline 7
; //目标MCU:ATmega8   
; //晶振:  8MHZ
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_ms::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 11
; /******************************************/
; #include <iom8v.h>
; #include <macros.h>
; #include "Delay.h"
	.dbline 12
; 
	clr R20
	clr R21
	rjmp L8
L7:
	.dbline 14
	.dbline 15
	rcall _delay_1ms
	.dbline 16
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 17
L8:
	.dbline 13
; unsigned char CountNum;   //全局变量,用来计数
	cp R20,R22
	cpc R21,R23
	brlo L7
	.dbline -2
	.dbline 18
; 
; #pragma interrupt_handler int_fun:2
; #pragma interrupt_handler int_fun:3
; void int_fun(void)
; {
L6:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int_fun
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\中断\Int0/Delay.h
	.area vector(rom, abs)
	.org 4
	rjmp _int_fun
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\中断\Int0/Delay.h
	.dbfile F:\Learn\AVR\Pro_Mega8\中断\Int0\Int0.C
	.dbfunc e int_fun _int_fun fV
	.even
_int_fun::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 18
	.dbline 19
	lds R24,_CountNum
	subi R24,255    ; addi 1
	mov R2,R24
	sts _CountNum,R2
	cpi R24,100
	brlo L11
	.dbline 20
	clr R2
	sts _CountNum,R2
L11:
	.dbline -2
	.dbline 21
;     if(++CountNum>=100)
; 	    CountNum=0;		
; }
L10:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area lit(rom, con, rel)
L14:
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\中断\Int0\Int0.C
	.dbfunc e main _main fV
;          temp2 -> <dead>
;            num -> y+0
;           temp -> R20
	.even
_main::
	sbiw R28,10
	.dbline -1
	.dbline 25
; 
; //主函数,依次显示数字0~9
; void main()
; {
	.dbline 27
; 	unsigned char temp,temp2;
; 	unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 
	ldi R24,<L14
	ldi R25,>L14
	movw R30,R28
	ldi R16,10
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 30
; 	                       0x6D, 0x7D, 0x07, 0x7F, 0x6F};
; 	//初始化端口
; 	DDRB=0xFF;	  //设置B口为输出模式
	ldi R24,255
	out 0x17,R24
	.dbline 31
; 	PORTB=0xFF;	  //置高电平
	out 0x18,R24
	.dbline 32
; 	DDRC=0x03;
	ldi R24,3
	out 0x14,R24
	.dbline 33
; 	PORTC=0xFF;
	ldi R24,255
	out 0x15,R24
	.dbline 34
; 	DDRD=0xFF;
	out 0x11,R24
	.dbline 35
; 	PORTD=0xFF;   
	out 0x12,R24
	.dbline 37
;     	
; 	MCUCR=0x02;   //INT0下降沿触发,INT1低电平有效
	ldi R24,2
	out 0x35,R24
	.dbline 38
; 	GICR|=0xC0;   //打开INT0,INT1中断
	in R24,0x3b
	ori R24,192
	out 0x3b,R24
	.dbline 39
;     GIFR=0xC0;    //清除INT0、INT1中断标志位
	ldi R24,192
	out 0x3a,R24
	.dbline 41
; 	
; 	CountNum=0;   //初始化全局变量
	clr R2
	sts _CountNum,R2
	.dbline 42
; 	SEI();        //打开全局中断
	sei
	rjmp L16
L15:
	.dbline 44
	.dbline 45
	cli
	.dbline 46
	ldi R17,10
	lds R16,_CountNum
	rcall div8u
	mov R20,R16
	.dbline 47
	cbi 0x15,0
	.dbline 48
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
	.dbline 49
	ldi R16,1
	ldi R17,0
	rcall _delay_ms
	.dbline 50
	in R24,0x15
	ori R24,255
	out 0x15,R24
	.dbline 51
	ldi R17,10
	lds R16,_CountNum
	rcall mod8u
	mov R20,R16
	.dbline 52
	sei
	.dbline 53
	cbi 0x15,1
	.dbline 54
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
	.dbline 55
	ldi R16,1
	ldi R17,0
	rcall _delay_ms
	.dbline 56
	in R24,0x15
	ori R24,255
	out 0x15,R24
	.dbline 57
	sei
	.dbline 58
	ldi R16,1
	ldi R17,0
	rcall _delay_ms
	.dbline 59
L16:
	.dbline 43
	rjmp L15
X0:
	.dbline -2
	.dbline 60
; 	while (1)
; 	{
; 	    CLI(); 
;         temp=CountNum/10;
; 		PORTC&=~(1);			
; 		PORTB=num[temp];
; 		delay_ms(1);
; 		PORTC|=0xFF;
; 		temp=CountNum%10;
; 		SEI();
; 		PORTC&=~(2);		
; 		PORTB=num[temp];			
; 		delay_ms(1);
; 		PORTC|=0xFF; 
; 		SEI();
; 		delay_ms(1);   	
;      }
; }
L13:
	adiw R28,10
	.dbline 0 ; func end
	ret
	.dbsym l temp2 1 c
	.dbsym l num 0 A[10:10]c
	.dbsym r temp 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\中断\Int0\Int0.C
_CountNum::
	.blkb 1
	.dbsym e CountNum _CountNum c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -