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

📄 numled.s

📁 详细介绍M8两版间通讯
💻 S
字号:
	.module NumLED.c
	.area code(ram, con, rel)
	.area lit(rom, con, rel)
_seg_table::
	.byte 192,249
	.byte 164,176
	.byte 153,146
	.byte 130,248
	.byte 128,144
	.byte 136,131
	.byte 198,161
	.byte 134,142
	.dbfile G:\Mega8程序\TCXO评估板\NumLED.c
	.dbsym e seg_table _seg_table A[16:16]kc
	.area data(ram, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\NumLED.c
_led_buff::
	.blkb 2
	.area idata
	.byte 127,255
	.area data(ram, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\NumLED.c
	.blkb 2
	.area idata
	.byte 255,255
	.area data(ram, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\NumLED.c
	.dbsym e led_buff _led_buff A[4:4]c
L2:
	.blkw 1
	.area idata
	.word _seg_table
	.area data(ram, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\NumLED.c
	.area text(rom, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\NumLED.c
	.dbfunc e ADCtoBCD _ADCtoBCD fV
	.dbsym s pStr L2 pkc
;              i -> R10
;           temp -> R12,R13
	.even
_ADCtoBCD::
	rcall push_gset4
	movw R12,R16
	.dbline -1
	.dbline 21
; /*  目标MCU:MEGA8   晶振:内部RC(INT) 8MHZ,该模块中使用了seg_table[16]数组
; 来表示LED的16个字符0~F,led_buff[4]表示4个LED的字符代码*/
; #include<iom8v.h> 
; #include <macros.h>
; #define Vref 4995
; 
; #pragma data:code
; const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,
; 																	 0x99,0x92,0x82,0xf8,
; 																	 0x80,0x90,0x88,0x83,
; 																	 0xc6,0xa1,0x86,0x8e};
; /*LED Code:定义在Flash中					 0,1,2,3,
; 																	 4,5,6,7,
; 																	 8,9,A,B,
; 																	 C,D,E,F
; */
; 
; #pragma data:data
; unsigned char led_buff[4]={0x7F,0xFF,0xFF,0xFF};//首位为"."点,其他位没有显示
; void ADCtoBCD(unsigned int temp)//16进制数值转换为BCD码,12精度
;  {
	.dbline 24
; 	unsigned char i;
; 	static const unsigned char *pStr=seg_table;
; 	temp=(unsigned int)(((unsigned long)((unsigned long)temp*Vref))/0xfff);
	movw R2,R12
	clr R4
	clr R5
	ldi R20,131
	ldi R21,19
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	rcall empy32u
	ldi R20,255
	ldi R21,15
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	rcall div32u
	movw R12,R16
	.dbline 25
; 	for(i=0;i<4;i++)
	clr R10
	rjmp L6
L3:
	.dbline 26
	.dbline 27
	ldi R18,10
	ldi R19,0
	movw R16,R12
	rcall mod16u
	movw R30,R16
	lds R2,L2
	lds R3,L2+1
	add R30,R2
	adc R31,R3
	lpm R30,Z
	ldi R24,<_led_buff
	ldi R25,>_led_buff
	mov R26,R10
	clr R27
	add R26,R24
	adc R27,R25
	st x,R30
	.dbline 28
	ldi R18,10
	ldi R19,0
	movw R16,R12
	rcall div16u
	movw R12,R16
	.dbline 29
L4:
	.dbline 25
	inc R10
L6:
	.dbline 25
	mov R24,R10
	cpi R24,4
	brlo L3
	.dbline 30
; 	 {
; 		led_buff[i]=*(pStr+temp%10);
; 		temp=temp/10;
; 	 }
; 	led_buff[3]&=0x7f;
	lds R24,_led_buff+3
	andi R24,127
	sts _led_buff+3,R24
	.dbline -2
L1:
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 10 c
	.dbsym r temp 12 i
	.dbend
	.dbfunc e led_init _led_init fV
	.even
_led_init::
	.dbline -1
	.dbline 33
;  }
; void led_init(void)
;  {
	.dbline 34
; 	DDRB|=0xff;
	in R24,0x17
	ori R24,255
	out 0x17,R24
	.dbline 36
; 	//方向:输出
; 	PORTB|=0xff;
	in R24,0x18
	ori R24,255
	out 0x18,R24
	.dbline 38
; 	//LED数据-
; 	DDRD|=0xf0;
	in R24,0x11
	ori R24,240
	out 0x11,R24
	.dbline 40
; 	//D口高位输出,单只选通4个LED功能
; 	PORTD|=0xf0;
	in R24,0x12
	ori R24,240
	out 0x12,R24
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e spark _spark fV
;            num -> R20
	.even
_spark::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 44
; 	//高位输出高电平,LED全部熄灭.低位输入,全部为高阻态,如果为1,则带上拉电阻
;  }
; void spark(unsigned char num)
;  {
	.dbline 45
; 	PORTB=led_buff[num];
	ldi R24,<_led_buff
	ldi R25,>_led_buff
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
	.dbline 46
; 	PORTD=0xf0&(~(1<<(num+4)));
	mov R17,R20
	subi R17,252    ; addi 4
	ldi R16,1
	rcall lsl8
	mov R24,R16
	com R24
	andi R24,240
	out 0x12,R24
	.dbline -2
L9:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r num 20 c
	.dbend

⌨️ 快捷键说明

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