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

📄 lc.lst

📁 ICC-AVR环境,用ATmage16做的LC表
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0055 E5CF      LDI	R28,0x5F
    0056 E0D4      LDI	R29,4
    0057 BFCD      OUT	0x3D,R28
    0058 BFDE      OUT	0x3E,R29
    0059 51C0      SUBI	R28,0x10
    005A 40D0      SBCI	R29,0
    005B EA0A      LDI	R16,0xAA
    005C 8308      STD	Y+0,R16
    005D 2400      CLR	R0
    005E E9E4      LDI	R30,0x94
    005F E0F0      LDI	R31,0
    0060 E010      LDI	R17,0
    0061 39EC      CPI	R30,0x9C
    0062 07F1      CPC	R31,R17
    0063 F011      BEQ	0x0066
    0064 9201      ST	R0,Z+
    0065 CFFB      RJMP	0x0061
    0066 8300      STD	Z+0,R16
    0067 E7E6      LDI	R30,0x76
    0068 E0F0      LDI	R31,0
    0069 E6A0      LDI	R26,0x60
    006A E0B0      LDI	R27,0
    006B E010      LDI	R17,0
    006C 3AEA      CPI	R30,0xAA
    006D 07F1      CPC	R31,R17
    006E F021      BEQ	0x0073
    006F 95C8      LPM
    0070 9631      ADIW	R30,1
    0071 920D      ST	R0,X+
    0072 CFF9      RJMP	0x006C
    0073 940E010C  CALL	_main
_exit:
    0075 CFFF      RJMP	_exit
FILE: E:\资料文件\MCU\myLC\LCD.h
(0001) #ifndef __LCD_h
(0002) #define __LCD_h
(0003) 
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) 
(0007) #define LCD_EN_PORT    PORTC
(0008) #define LCD_RW_PORT    PORTC
(0009) #define LCD_RS_PORT    PORTC
(0010) #define LCD_DATA_PORT  PORTA
(0011) #define LCD_DATA_DDR   DDRA
(0012) #define LCD_DATA_PIN   PINA
(0013) #define LCD_EN         0x02
(0014) #define LCD_RS         0x01
(0015) #define LCD_DATA       0xf0
(0016) 
(0017) extern void delay_nus(unsigned char n);
(0018) extern void delay_nms(unsigned char n);
(0019) 
(0020) void LCD_en_write(void)  //液晶使能
(0021) {
(0022) 	LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
    0076 9AA9      SBI	0x15,1
(0023) 	delay_nus(5);
    0077 E005      LDI	R16,5
    0078 D3C4      RCALL	_delay_nus
(0024) 	LCD_EN_PORT&=~LCD_EN;
    0079 98A9      CBI	0x15,1
    007A 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
    007B 940E04F7  CALL	push_gset4
    007D 0169      MOVW	R12,R18
    007E 0158      MOVW	R10,R16
(0025) }
(0026) 
(0027) void LCD_write_char(unsigned command,unsigned data) // 写数据
(0028) {
(0029) 	unsigned command_temp,data_temp;
(0030) 	command_temp=command;
    007F 01A5      MOVW	R20,R10
(0031) 	data_temp=data;
    0080 01B6      MOVW	R22,R12
(0032) 	delay_nus(20);
    0081 E104      LDI	R16,0x14
    0082 D3BA      RCALL	_delay_nus
(0033) 	if(command==0)
    0083 3040      CPI	R20,0
    0084 0745      CPC	R20,R21
    0085 F511      BNE	0x00A8
(0034) 	{
(0035) 		LCD_RS_PORT|=LCD_RS;  //RS=1
    0086 9AA8      SBI	0x15,0
(0036) 		LCD_DATA_PORT&=0x0f;
    0087 B38B      IN	R24,0x1B
    0088 708F      ANDI	R24,0xF
    0089 BB8B      OUT	0x1B,R24
(0037) 		LCD_DATA_PORT|=data_temp&0xf0;  //写高四位
    008A 01CB      MOVW	R24,R22
    008B 7F80      ANDI	R24,0xF0
    008C 7090      ANDI	R25,0
    008D B22B      IN	R2,0x1B
    008E 2433      CLR	R3
    008F 2A28      OR	R2,R24
    0090 2A39      OR	R3,R25
    0091 BA2B      OUT	0x1B,R2
(0038) 		LCD_en_write();
    0092 DFE3      RCALL	_LCD_en_write
(0039) 		data_temp=data_temp<<4;  
    0093 0F66      LSL	R22
    0094 1F77      ROL	R23
    0095 0F66      LSL	R22
    0096 1F77      ROL	R23
    0097 0F66      LSL	R22
    0098 1F77      ROL	R23
    0099 0F66      LSL	R22
    009A 1F77      ROL	R23
(0040) 		LCD_DATA_PORT&=0x0f;
    009B B38B      IN	R24,0x1B
    009C 708F      ANDI	R24,0xF
    009D BB8B      OUT	0x1B,R24
(0041) 		LCD_DATA_PORT|=data_temp&0xf0;   //写低四位
    009E 01CB      MOVW	R24,R22
    009F 7F80      ANDI	R24,0xF0
    00A0 7090      ANDI	R25,0
    00A1 B22B      IN	R2,0x1B
    00A2 2433      CLR	R3
    00A3 2A28      OR	R2,R24
    00A4 2A39      OR	R3,R25
    00A5 BA2B      OUT	0x1B,R2
(0042) 		LCD_en_write();
    00A6 DFCF      RCALL	_LCD_en_write
(0043) 	}
    00A7 C021      RJMP	0x00C9
(0044) 	else
(0045) 	{
(0046) 		LCD_RS_PORT&=~LCD_RS;   //RS=0
    00A8 98A8      CBI	0x15,0
(0047) 		LCD_DATA_PORT&=0x0f;
    00A9 B38B      IN	R24,0x1B
    00AA 708F      ANDI	R24,0xF
    00AB BB8B      OUT	0x1B,R24
(0048) 		LCD_DATA_PORT|=command_temp&0xf0; //写高四位
    00AC 01CA      MOVW	R24,R20
    00AD 7F80      ANDI	R24,0xF0
    00AE 7090      ANDI	R25,0
    00AF B22B      IN	R2,0x1B
    00B0 2433      CLR	R3
    00B1 2A28      OR	R2,R24
    00B2 2A39      OR	R3,R25
    00B3 BA2B      OUT	0x1B,R2
(0049) 		LCD_en_write();
    00B4 DFC1      RCALL	_LCD_en_write
(0050) 		command_temp=command_temp<<4;
    00B5 0F44      LSL	R20
    00B6 1F55      ROL	R21
    00B7 0F44      LSL	R20
    00B8 1F55      ROL	R21
    00B9 0F44      LSL	R20
    00BA 1F55      ROL	R21
    00BB 0F44      LSL	R20
    00BC 1F55      ROL	R21
(0051) 		LCD_DATA_PORT&=0x0f;
    00BD B38B      IN	R24,0x1B
    00BE 708F      ANDI	R24,0xF
    00BF BB8B      OUT	0x1B,R24
(0052) 		LCD_DATA_PORT|=command_temp&0xf0;  //写低四位
    00C0 01CA      MOVW	R24,R20
    00C1 7F80      ANDI	R24,0xF0
    00C2 7090      ANDI	R25,0
    00C3 B22B      IN	R2,0x1B
    00C4 2433      CLR	R3
    00C5 2A28      OR	R2,R24
    00C6 2A39      OR	R3,R25
    00C7 BA2B      OUT	0x1B,R2
(0053) 		LCD_en_write();
    00C8 DFAD      RCALL	_LCD_en_write
(0054) 	}
    00C9 940E04EF  CALL	pop_gset4
    00CB 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R20
  x                    --> R22
    00CC 940E04FB  CALL	push_gset2
    00CE 2F42      MOV	R20,R18
    00CF 2F60      MOV	R22,R16
(0055) }
(0056) 
(0057) void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0058) {
(0059)     unsigned char address;
(0060)     if (y == 0) address = 0x80 + x;
    00D0 2344      TST	R20
    00D1 F419      BNE	0x00D5
    00D2 2F46      MOV	R20,R22
    00D3 5840      SUBI	R20,0x80
    00D4 C002      RJMP	0x00D7
(0061)     else 
(0062) 		address = 0xc0 + x;
    00D5 2F46      MOV	R20,R22
    00D6 5440      SUBI	R20,0x40
(0063)     LCD_write_char( address, 0 );
    00D7 2722      CLR	R18
    00D8 2733      CLR	R19
    00D9 2F04      MOV	R16,R20
    00DA 2711      CLR	R17
    00DB DF9F      RCALL	_LCD_write_char
    00DC 940E04E9  CALL	pop_gset2
    00DE 9508      RET
(0064) }
(0065) 
(0066) void LCD_init(void)       //液晶初始化
(0067) {
(0068) 	delay_nms(30);
_LCD_init:
    00DF E10E      LDI	R16,0x1E
    00E0 D373      RCALL	_delay_nms
(0069) 	LCD_write_char(0x28,0);  //4位显示
    00E1 2722      CLR	R18
    00E2 2733      CLR	R19
    00E3 E208      LDI	R16,0x28
    00E4 E010      LDI	R17,0
    00E5 DF95      RCALL	_LCD_write_char
(0070) 	LCD_write_char(0x0c,0);  //显示开
    00E6 2722      CLR	R18
    00E7 2733      CLR	R19
    00E8 E00C      LDI	R16,0xC
    00E9 E010      LDI	R17,0
    00EA DF90      RCALL	_LCD_write_char
(0071) 	LCD_write_char(0x01,0);  //清屏
    00EB 2722      CLR	R18
    00EC 2733      CLR	R19
    00ED E001      LDI	R16,1
    00EE E010      LDI	R17,0
    00EF DF8B      RCALL	_LCD_write_char
(0072) 	delay_nms(30);
    00F0 E10E      LDI	R16,0x1E
    00F1 D362      RCALL	_delay_nms
    00F2 9508      RET
_LCD_write_string:
  s                    --> R20
  y                    --> R10
  x                    --> R22
    00F3 940E04F9  CALL	push_gset3
    00F5 2EA2      MOV	R10,R18
    00F6 2F60      MOV	R22,R16
    00F7 814E      LDD	R20,Y+6
    00F8 815F      LDD	R21,Y+7
(0073) }
(0074) 
(0075) void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)
(0076) {
(0077)     LCD_set_xy( x, y); //写地址
    00F9 2D2A      MOV	R18,R10
    00FA 2F06      MOV	R16,R22
    00FB DFD0      RCALL	_LCD_set_xy
    00FC C008      RJMP	0x0105
(0078) 	
(0079)     while (*s)  // 写显示字符
(0080) 	{
(0081)         LCD_write_char(0, *s);
    00FD 01FA      MOVW	R30,R20
    00FE 8120      LDD	R18,Z+0
    00FF 2733      CLR	R19
    0100 2700      CLR	R16
    0101 2711      CLR	R17
    0102 DF78      RCALL	_LCD_write_char
(0082) 		s++;
    0103 5F4F      SUBI	R20,0xFF
    0104 4F5F      SBCI	R21,0xFF
    0105 01FA      MOVW	R30,R20
    0106 8020      LDD	R2,Z+0
    0107 2022      TST	R2
    0108 F7A1      BNE	0x00FD
    0109 940E04EC  CALL	pop_gset3
    010B 9508      RET
FILE: E:\资料文件\MCU\myLC\LC.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include <stdlib.h>
(0004) #include "LCD.h"
(0005) 
(0006) #define C1			   1	  //C1=1uF
(0007) #define L1			   100	  //L1=100uH
(0008) 
(0009) unsigned int last_TCNT1,Cx,Lx;
(0010) unsigned int Cn;			  //分布电容,单位pf
(0011) unsigned char buf[8]="";
(0012) 
(0013) /*------------------------------函数原型声明------------------------------*/
(0014) void delay_nus        (unsigned char n);
(0015) void delay_nms        (unsigned char n);
(0016) void timer1_init	  (void);
(0017) void timer2_init	  (void);
(0018) void calc_Cn		  (void);
(0019) void calc_Cx		  (void);
(0020) void calc_Lx		  (void);
(0021) /*------------------------------------------------------------------------*/
(0022) 
(0023) void main(void)
(0024) {
(0025) 	unsigned char k=5;
_main:
  k                    --> R20
    010C E045      LDI	R20,5
(0026) 	/*----取消-----
(0027) 	OSCCAL=0xA9;
(0028) 	-------------*/
(0029) 		
(0030) 	DDRA|=LCD_DATA;   // 数据为输出
    010D B38A      IN	R24,0x1A
    010E 6F80      ORI	R24,0xF0
    010F BB8A      OUT	0x1A,R24
(0031) 	DDRC|=LCD_RS|LCD_EN;  //置位RS和EN
    0110 B384      IN	R24,0x14
    0111 6083      ORI	R24,3
    0112 BB84      OUT	0x14,R24
(0032) 	DDRD=0x00;
    0113 2422      CLR	R2
    0114 BA21      OUT	0x11,R2
(0033) 	PORTD=0xFF;
    0115 EF8F      LDI	R24,0xFF
    0116 BB82      OUT	0x12,R24
(0034) 	LCD_init();
    0117 DFC7      RCALL	_LCD_init
    0118 C002      RJMP	0x011B
(0035) 	
(0036) 	while (--k)
(0037) 		 delay_nms(100);
    0119 E604      LDI	R16,0x64
    011A D339      RCALL	_delay_nms
    011B 2F84      MOV	R24,R20
    011C 5081      SUBI	R24,1
    011D 2F48      MOV	R20,R24
    011E 2388      TST	R24
    011F F7C9      BNE	0x0119
(0038) 	
(0039) 	CLI(); //disable all interrupts
    0120 94F8      BCLR	7
(0040) 	timer1_init();
    0121 D086      RCALL	_timer1_init
(0041) 	timer2_init();
    0122 D08D      RCALL	_timer2_init
(0042) 	MCUCR = 0x00;
    0123 2422      CLR	R2
    0124 BE25      OUT	0x35,R2
(0043) 	GICR  = 0x00;
    0125 BE2B      OUT	0x3B,R2
(0044) 	TIMSK = 0x40; //timer interrupt sources
    0126 E480      LDI	R24,0x40
    0127 BF89      OUT	0x39,R24
(0045) 	SEI();
    0128 9478      BSET	7
(0046) 	
(0047) 	LCD_write_char(0x01,0);
    0129 2722      CLR	R18
    012A 2733      CLR	R19
    012B E001      LDI	R16,1
    012C E010      LDI	R17,0
    012D DF4D      RCALL	_LCD_write_char
(0048) 	delay_nms(2);
    012E E002      LDI	R16,2
    012F D324      RCALL	_delay_nms
(0049) 	while(1);
    0130 CFFF      RJMP	0x0130
    0131 9508      RET
_timer2_ovf_isr:
    0132 940E0556  CALL	push_lset
    0134 9722      SBIW	R28,2
(0050) }
(0051) 
(0052) #pragma interrupt_handler timer2_ovf_isr:5
(0053) void timer2_ovf_isr(void)
(0054) {
(0055)     TCCR2 = 0x00; //stop Timer1
    0135 2422      CLR	R2
    0136 BC25      OUT	0x25,R2
(0056) 	TCCR1B= 0x00; //stop Timer2
    0137 BC2E      OUT	0x2E,R2
(0057) 	last_TCNT1=TCNT1;
    0138 B42C      IN	R2,0x2C
    0139 B43D      IN	R3,0x2D
    013A 9230009B  STS	last_TCNT1+1,R3
    013C 9220009A  STS	last_TCNT1,R2
(0058) 
(0059) 	if((PIND|0xFE)==0xFE) //PORTD.0为0,校准模式,不接Cx和Lx
    013E B380      IN	R24,0x10
    013F 6F8E      ORI	R24,0xFE
    0140 3F8E      CPI	R24,0xFE
    0141 F599      BNE	0x0175
(0060) 	{ 
(0061) 		LCD_write_char(0x01,0);
    0142 2722      CLR	R18
    0143 2733      CLR	R19
    0144 E001      LDI	R16,1
    0145 E010      LDI	R17,0
    0146 DF34      RCALL	_LCD_write_char
(0062) 		delay_nms(2);
    0147 E002      LDI	R16,2
    0148 D30B      RCALL	_delay_nms
(0063) 		LCD_set_xy(0,0);
    0149 2722      CLR	R18
    014A 2700      CLR	R16
    014B DF80      RCALL	_LCD_set_xy
(0064) 		
(0065) 		LCD_write_char(0,'C');
    014C E423      LDI	R18,0x43
    014D E030      LDI	R19,0
    014E 2700      CLR	R16
    014F 2711      CLR	R17
    0150 DF2A      RCALL	_LCD_write_char
(0066) 		LCD_write_char(0,'n');
    0151 E62E      LDI	R18,0x6E
    0152 E030      LDI	R19,0
    0153 2700      CLR	R16
    0154 2711      CLR	R17
    0155 DF25      RCALL	_LCD_write_char
(0067) 		LCD_write_char(0,'=');
    0156 E32D      LDI	R18,0x3D
    0157 E030      LDI	R19,0
    0158 2700      CLR	R16
    0159 2711      CLR	R17
    015A DF20      RCALL	_LCD_write_char
(0068) 		calc_Cn();
    015B D05C      RCALL	_calc_Cn
(0069) 		
(0070) 		LCD_write_string(0,1,"TCNT1=");
    015C E688      LDI	R24,0x68
    015D E090      LDI	R25,0
    015E 8399      STD	Y+1,R25
    015F 8388      STD	Y+0,R24
    0160 E021      LDI	R18,1
    0161 2700      CLR	R16
    0162 DF90      RCALL	_LCD_write_string
(0071) 		LCD_write_string(1,1,itoa(buf,last_TCNT1,10));

⌨️ 快捷键说明

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