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

📄 lc.s

📁 ICC-AVR环境,用ATmage16做的LC表
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module LC.c
	.area text(rom, con, rel)
	.dbfile E:\资料文件\MCU\myLC/LCD.h
	.dbfunc e LCD_en_write _LCD_en_write fV
	.even
_LCD_en_write::
	.dbline -1
	.dbline 21
; #include <iom16v.h>
; #include <macros.h>
; #include <stdlib.h>
; #include "LCD.h"
; 
; #define C1			   1	  //C1=1uF
; #define L1			   100	  //L1=100uH
; 
; unsigned int last_TCNT1,Cx,Lx;
; unsigned int Cn;			  //分布电容,单位pf
; unsigned char buf[8]="";
; 
; /*------------------------------函数原型声明------------------------------*/
; void delay_nus        (unsigned char n);
; void delay_nms        (unsigned char n);
; void timer1_init	  (void);
; void timer2_init	  (void);
; void calc_Cn		  (void);
; void calc_Cx		  (void);
; void calc_Lx		  (void);
; /*------------------------------------------------------------------------*/
	.dbline 22
; 
	sbi 0x15,1
	.dbline 23
; void main(void)
	ldi R16,5
	xcall _delay_nus
	.dbline 24
; {
	cbi 0x15,1
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_char _LCD_write_char fV
;      data_temp -> R22,R23
;   command_temp -> R20,R21
;           data -> R12,R13
;        command -> R10,R11
	.even
_LCD_write_char::
	xcall push_gset4
	movw R12,R18
	movw R10,R16
	.dbline -1
	.dbline 28
; 	unsigned char k=5;
; 	/*----取消-----
; 	OSCCAL=0xA9;
; 	-------------*/
	.dbline 30
; 		
; 	DDRA|=LCD_DATA;   // 数据为输出
	movw R20,R10
	.dbline 31
; 	DDRC|=LCD_RS|LCD_EN;  //置位RS和EN
	movw R22,R12
	.dbline 32
; 	DDRD=0x00;
	ldi R16,20
	xcall _delay_nus
	.dbline 33
; 	PORTD=0xFF;
	cpi R20,0
	cpc R20,R21
	brne L3
X0:
	.dbline 34
; 	LCD_init();
	.dbline 35
; 	
	sbi 0x15,0
	.dbline 36
; 	while (--k)
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 37
; 		 delay_nms(100);
	movw R24,R22
	andi R24,240
	andi R25,0
	in R2,0x1b
	clr R3
	or R2,R24
	or R3,R25
	out 0x1b,R2
	.dbline 38
; 	
	xcall _LCD_en_write
	.dbline 39
; 	CLI(); //disable all interrupts
	lsl R22
	rol R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 40
; 	timer1_init();
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 41
; 	timer2_init();
	movw R24,R22
	andi R24,240
	andi R25,0
	in R2,0x1b
	clr R3
	or R2,R24
	or R3,R25
	out 0x1b,R2
	.dbline 42
; 	MCUCR = 0x00;
	xcall _LCD_en_write
	.dbline 43
; 	GICR  = 0x00;
	xjmp L4
L3:
	.dbline 45
	.dbline 46
	cbi 0x15,0
	.dbline 47
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 48
	movw R24,R20
	andi R24,240
	andi R25,0
	in R2,0x1b
	clr R3
	or R2,R24
	or R3,R25
	out 0x1b,R2
	.dbline 49
	xcall _LCD_en_write
	.dbline 50
	lsl R20
	rol R21
	lsl R20
	rol R21
	lsl R20
	rol R21
	lsl R20
	rol R21
	.dbline 51
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 52
	movw R24,R20
	andi R24,240
	andi R25,0
	in R2,0x1b
	clr R3
	or R2,R24
	or R3,R25
	out 0x1b,R2
	.dbline 53
	xcall _LCD_en_write
	.dbline 54
L4:
	.dbline -2
L2:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r data_temp 22 i
	.dbsym r command_temp 20 i
	.dbsym r data 12 i
	.dbsym r command 10 i
	.dbend
	.dbfunc e LCD_set_xy _LCD_set_xy fV
;        address -> R20
;              y -> R20
;              x -> R22
	.even
_LCD_set_xy::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 58
; 	TIMSK = 0x40; //timer interrupt sources
; 	SEI();
; 	
; 	LCD_write_char(0x01,0);
; 	delay_nms(2);
; 	while(1);
; }
; 
; #pragma interrupt_handler timer2_ovf_isr:5
; void timer2_ovf_isr(void)
; {
;     TCCR2 = 0x00; //stop Timer1
; 	TCCR1B= 0x00; //stop Timer2
; 	last_TCNT1=TCNT1;
; 
	.dbline 60
; 	if((PIND|0xFE)==0xFE) //PORTD.0为0,校准模式,不接Cx和Lx
; 	{ 
	tst R20
	brne L6
	.dbline 60
	mov R20,R22
	subi R20,128    ; addi 128
	xjmp L7
L6:
	.dbline 62
; 		LCD_write_char(0x01,0);
; 		delay_nms(2);
	mov R20,R22
	subi R20,64    ; addi 192
L7:
	.dbline 63
; 		LCD_set_xy(0,0);
	clr R18
	clr R19
	mov R16,R20
	clr R17
	xcall _LCD_write_char
	.dbline -2
L5:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e LCD_init _LCD_init fV
	.even
_LCD_init::
	.dbline -1
	.dbline 67
; 		
; 		LCD_write_char(0,'C');
; 		LCD_write_char(0,'n');
; 		LCD_write_char(0,'=');
	.dbline 68
; 		calc_Cn();
	ldi R16,30
	xcall _delay_nms
	.dbline 69
; 		
	clr R18
	clr R19
	ldi R16,40
	ldi R17,0
	xcall _LCD_write_char
	.dbline 70
; 		LCD_write_string(0,1,"TCNT1=");
	clr R18
	clr R19
	ldi R16,12
	ldi R17,0
	xcall _LCD_write_char
	.dbline 71
; 		LCD_write_string(1,1,itoa(buf,last_TCNT1,10));
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	xcall _LCD_write_char
	.dbline 72
; 		
	ldi R16,30
	xcall _delay_nms
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_string _LCD_write_string fV
;              s -> R20,R21
;              y -> R10
;              x -> R22
	.even
_LCD_write_string::
	xcall push_gset3
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 76
; 	}
; 	else //测量模式,接入被测元件Cx或Lx
; 	{ 
; 		LCD_write_char(0x01,0);
	.dbline 77
; 		delay_nms(2);
	mov R18,R10
	mov R16,R22
	xcall _LCD_set_xy
	xjmp L11
L10:
	.dbline 80
	.dbline 81
	movw R30,R20
	ldd R18,z+0
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 82
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 83
L11:
	.dbline 79
; 		
; 		LCD_set_xy(0,0);
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L10
	.dbline -2
L9:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbsym r y 10 c
	.dbsym r x 22 c
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\资料文件\MCU\myLC/LCD.h
_buf::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\资料文件\MCU\myLC/LCD.h
	.blkb 7
	.area idata
	.byte 0,0,0,0,0,0,0
	.area data(ram, con, rel)
	.dbfile E:\资料文件\MCU\myLC/LCD.h
	.dbfile E:\资料文件\MCU\myLC\LC.c
	.dbsym e buf _buf A[8:8]c
	.area text(rom, con, rel)
	.dbfile E:\资料文件\MCU\myLC\LC.c
	.dbfunc e main _main fV
;              k -> R20
	.even
_main::
	.dbline -1
	.dbline 24
	.dbline 25
	ldi R20,5
	.dbline 30
	in R24,0x1a
	ori R24,240
	out 0x1a,R24
	.dbline 31
	in R24,0x14
	ori R24,3
	out 0x14,R24
	.dbline 32
	clr R2
	out 0x11,R2
	.dbline 33
	ldi R24,255
	out 0x12,R24
	.dbline 34
	xcall _LCD_init
	xjmp L15
L14:
	.dbline 37
	ldi R16,100
	xcall _delay_nms
L15:
	.dbline 36
	mov R24,R20
	subi R24,1
	mov R20,R24
	tst R24
	brne L14
	.dbline 39
	cli
	.dbline 40
	xcall _timer1_init
	.dbline 41
	xcall _timer2_init
	.dbline 42
	clr R2
	out 0x35,R2
	.dbline 43
	out 0x3b,R2
	.dbline 44
	ldi R24,64
	out 0x39,R24
	.dbline 45
	sei
	.dbline 47
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	xcall _LCD_write_char
	.dbline 48
	ldi R16,2
	xcall _delay_nms
L17:
	.dbline 49
L18:
	.dbline 49
	xjmp L17
X1:
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbend
	.area vector(rom, abs)
	.org 16
	jmp _timer2_ovf_isr
	.area text(rom, con, rel)
	.dbfile E:\资料文件\MCU\myLC\LC.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.even
_timer2_ovf_isr::
	xcall push_lset
	sbiw R28,2
	.dbline -1
	.dbline 54
	.dbline 55
	clr R2
	out 0x25,R2
	.dbline 56
	out 0x2e,R2
	.dbline 57
	in R2,0x2c
	in R3,0x2d
	sts _last_TCNT1+1,R3
	sts _last_TCNT1,R2
	.dbline 59
	in R24,0x10
	ori R24,254
	cpi R24,254
	brne L21
	.dbline 60
	.dbline 61
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	xcall _LCD_write_char
	.dbline 62
	ldi R16,2
	xcall _delay_nms
	.dbline 63
	clr R18
	clr R16
	xcall _LCD_set_xy
	.dbline 65
	ldi R18,67
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 66
	ldi R18,110
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 67
	ldi R18,61
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 68
	xcall _calc_Cn
	.dbline 70
	ldi R24,<L23
	ldi R25,>L23
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _LCD_write_string
	.dbline 71
	ldi R24,10
	ldi R25,0
	std y+1,R25
	std y+0,R24
	lds R18,_last_TCNT1
	lds R19,_last_TCNT1+1
	ldi R16,<_buf
	ldi R17,>_buf
	xcall _itoa
	std y+1,R17
	std y+0,R16
	ldi R18,1
	ldi R16,1
	xcall _LCD_write_string
	.dbline 73
	xjmp L22
L21:
	.dbline 75
	.dbline 76
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	xcall _LCD_write_char
	.dbline 77
	ldi R16,2
	xcall _delay_nms
	.dbline 79
	clr R18
	clr R16
	xcall _LCD_set_xy
	.dbline 80
; 		LCD_write_char(0,'C');
	ldi R18,67
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 81
; 		LCD_write_char(0,'x');
	ldi R18,120
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 82
; 		LCD_write_char(0,'=');
	ldi R18,61
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 83
; 		calc_Cx();
	xcall _calc_Cx
	.dbline 85
; 		
; 		LCD_set_xy(0,1);
	ldi R18,1
	clr R16
	xcall _LCD_set_xy
	.dbline 86
; 		LCD_write_char(0,'L');
	ldi R18,76
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 87
; 		LCD_write_char(0,'x');
	ldi R18,120
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 88
; 		LCD_write_char(0,'=');
	ldi R18,61
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 89
; 		calc_Lx();
	xcall _calc_Lx
	.dbline 90
; 	}
L22:
	.dbline 92
; 	
; 	timer1_init();
	xcall _timer1_init
	.dbline 93
; 	timer2_init();
	xcall _timer2_init
	.dbline -2
L20:
	adiw R28,2
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 97
; }
; 
; void timer1_init(void)
; {
	.dbline 98
; 	TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 99
; 	TCNT1H = 0x00;
	out 0x2d,R2
	.dbline 100
; 	TCNT1L = 0x00;
	out 0x2c,R2
	.dbline 101
; 	TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 110
; 	/*----取消-----
; 	OCR1AH = 0x00;
; 	OCR1AL = 0x39;
; 	OCR1BH = 0x00;
; 	OCR1BL = 0x39;
; 	ICR1H  = 0x00;
; 	ICR1L  = 0x39;
; 	-------------*/
; 	TCCR1B = 0x06; //start,外部下降沿触发
	ldi R24,6
	out 0x2e,R24
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 114
; }
; 
; void timer2_init(void)
; {
	.dbline 115
; 	TCCR2 = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 116
; 	ASSR  = 0x00; //同步计算模式
	out 0x22,R2
	.dbline 117
; 	TCNT2 = 0x0A; //置初值,定时0.25s
	ldi R24,10
	out 0x24,R24
	.dbline 121
; 	/*----取消-----
; 	OCR2=0x9C;
; 	-------------*/
; 	TCCR2 = 0x07; //start,系统时钟1024分频
	ldi R24,7
	out 0x25,R24
	.dbline -2
L25:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e calc_Cn _calc_Cn fV
;              f -> y+2
	.even
_calc_Cn::
	xcall push_gset3
	sbiw R28,10
	.dbline -1
	.dbline 125
; }
; 
; void calc_Cn(void)
; {
	.dbline 126
;  	float f=1/(last_TCNT1*4)*1000000;
	lds R18,_last_TCNT1
	lds R19,_last_TCNT1+1
	ldi R16,4
	ldi R17,0
	xcall empy16s
	movw R18,R16
	ldi R16,1
	ldi R17,0
	xcall div16u
	movw R2,R16
	clr R4
	clr R5
	ldi R20,64
	ldi R21,66
	ldi R22,15
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32s
	xcall long2fp
	movw R30,R28
	std z+2,R16
	std z+3,R17
	std z+4,R18
	std z+5,R19
	.dbline 127
; 	Cn=(1/(39.4384*f*f*L1)-C1)/1000000;
	ldi R16,<L29
	ldi R17,>L29
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	ldi R16,<L30
	ldi R17,>L30
	xcall lpm32
	st -y,R19

⌨️ 快捷键说明

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