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

📄 delay.s

📁 键盘操作 键盘扫描 用的是单片机mega16
💻 S
字号:
	.module delay.c
	.area text(rom, con, rel)
	.dbfile D:\avrvi\democode\key_4\source\lib\delay.c
	.dbfunc e Delay100us _Delay100us fV
;              i -> R20
;              n -> R16
	.even
_Delay100us::
	xcall push_gset1
	.dbline -1
	.dbline 36
; /************************************************************
; 文   件:delay.c
; 用   途:delay100us和delay10ms软件延时函数
; Target : 任意AVR
; Crystal: #define F_CPU 进行设置
; 说   明:请与delay.h配合使用
;          请根据实际定义 #define F_CPU 为晶振大小
; 	     有中断时,延时将不再准确
; 创   建:2008.1.29
; 修   改:2008.1.29
; Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
; ************************************************************/
; 
; #include "..\config.h"
; 
; 
; 
; //需要根据频率调整循环变量
; #ifndef F_CPU
; #define F_CPU 1000000         	             //晶振频率
; #endif
; 
; 
; /*******************************************
; ** 函数名称: void Delay100us(uint8 n)
; ** 功能描述: 100us延时函数
; ** 输 入: 延时的时间
; ** 输出   : 无
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:最大参数为255
; ** 注意:如果中途有中断发生,延时将不只100us
; ********************************************/
; #define CONT_DELAY100US_COUNT F_CPU/100000
; void Delay100us(uint8 n)      //最大255
; {
	xjmp L3
L2:
	.dbline 39
; 	uint8 i;
; 	while(n--)                //5 clk	
; 	    {
	.dbline 40
; 		i=CONT_DELAY100US_COUNT;  //1 clk
	ldi R20,10
	xjmp L6
L5:
	.dbline 42
	.dbline 43
	nop
	.dbline 44
	nop
	.dbline 45
	nop
	.dbline 46
L6:
	.dbline 41
	mov R24,R20
	subi R24,1
	mov R20,R24
	tst R24
	brne L5
	.dbline 47
L3:
	.dbline 38
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L2
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 16 c
	.dbend
	.dbfunc e Delay10ms _Delay10ms fV
;              i -> R20,R21
;              n -> R16
	.even
_Delay10ms::
	xcall push_gset1
	.dbline -1
	.dbline 62
; 		while(--i)
; 		  {
; 		  NOP();
; 		  NOP();
; 		  NOP();
; 		  }          //10 clk
; 		}
; }
; 
; /*******************************************
; ** 函数名称: void Delay10ms(uint8 n)
; ** 功能描述: 10ms延时函数
; ** 输 入: 延时的时间
; ** 输出   : 无
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:最大参数为255
; ** 注意:如果中途有中断发生,延时将不只10ms
; ********************************************/
; #define CONT_DELAY10MS_COUNT F_CPU/1000
; void Delay10ms(uint8 n)       //最大255
; {
	xjmp L10
L9:
	.dbline 65
; 	uint16 i;
; 	while(n--)                //5 clk	
; 	    {
	.dbline 66
; 		i=CONT_DELAY10MS_COUNT;  //1 clk
	ldi R20,1000
	ldi R21,3
	xjmp L13
L12:
	.dbline 68
	.dbline 69
	nop
	.dbline 70
	nop
	.dbline 71
	nop
	.dbline 72
L13:
	.dbline 67
	movw R24,R20
	sbiw R24,1
	movw R20,R24
	cpi R20,0
	cpc R20,R21
	brne L12
X0:
	.dbline 73
L10:
	.dbline 64
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L9
	.dbline -2
L8:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 16 c
	.dbend

⌨️ 快捷键说明

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