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

📄 ad转化.lst

📁 我写的L297步进电机的驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    003A E5CF      LDI	R28,0x5F
    003B E0D4      LDI	R29,4
    003C BFCD      OUT	0x3D,R28
    003D BFDE      OUT	0x3E,R29
    003E 51C0      SUBI	R28,0x10
    003F 40D0      SBCI	R29,0
    0040 EA0A      LDI	R16,0xAA
    0041 8308      STD	Y+0,R16
    0042 2400      CLR	R0
    0043 E7EF      LDI	R30,0x7F
    0044 E0F0      LDI	R31,0
    0045 E010      LDI	R17,0
    0046 37EF      CPI	R30,0x7F
    0047 07F1      CPC	R31,R17
    0048 F011      BEQ	0x004B
    0049 9201      ST	R0,Z+
    004A CFFB      RJMP	0x0046
    004B 8300      STD	Z+0,R16
    004C E5E4      LDI	R30,0x54
    004D E0F0      LDI	R31,0
    004E E6A0      LDI	R26,0x60
    004F E0B0      LDI	R27,0
    0050 E010      LDI	R17,0
    0051 37E3      CPI	R30,0x73
    0052 07F1      CPC	R31,R17
    0053 F021      BEQ	0x0058
    0054 95C8      LPM
    0055 9631      ADIW	R30,1
    0056 920D      ST	R0,X+
    0057 CFF9      RJMP	0x0051
    0058 940E0154  CALL	_main
_exit:
    005A CFFF      RJMP	_exit
FILE: E:\单片机\PROJECT\高精度三维太阳自动跟踪器\程序\传感器控制\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 编译器:ICC-AVR v6.31A 
(0004) 目标芯片 : M16
(0005) 时钟: 1.0000Mhz
(0006) -----------------------------------------------------------------------*/
(0007) #ifndef __delay_h
(0008) #define __delay_h
(0009) void delay_nus(unsigned int n);
(0010) void delay_nms(unsigned int n);
(0011) void delay_1us(void);
(0012) void delay_1ms(void) ; 
(0013) 
(0014) void delay_1us(void)                 //1us延时函数
(0015)   {
(0016)    asm("nop");
_delay_1us:
    005B 0000      NOP
    005C 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    005D 940E01EC  CALL	push_gset2
    005F 01B8      MOVW	R22,R16
(0017)   }
(0018) 
(0019) void delay_nus(unsigned int n)       //N us延时函数
(0020)   {
(0021)    unsigned int i=0;
    0060 2744      CLR	R20
    0061 2755      CLR	R21
(0022)    for (i=0;i<n;i++)
    0062 C003      RJMP	0x0066
(0023)    delay_1us();
    0063 DFF7      RCALL	_delay_1us
    0064 5F4F      SUBI	R20,0xFF
    0065 4F5F      SBCI	R21,0xFF
    0066 1746      CP	R20,R22
    0067 0757      CPC	R21,R23
    0068 F3D0      BCS	0x0063
    0069 940E01E0  CALL	pop_gset2
    006B 9508      RET
(0024)   }
(0025)   
(0026) void delay_1ms(void)                 //1ms延时函数
(0027)   {
(0028)    unsigned int i;
(0029)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    006C 2700      CLR	R16
    006D 2711      CLR	R17
    006E C002      RJMP	0x0071
    006F 5F0F      SUBI	R16,0xFF
    0070 4F1F      SBCI	R17,0xFF
    0071 3704      CPI	R16,0x74
    0072 E0E4      LDI	R30,4
    0073 071E      CPC	R17,R30
    0074 F3D0      BCS	0x006F
    0075 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0076 940E01EC  CALL	push_gset2
    0078 01B8      MOVW	R22,R16
(0030)   }
(0031)   
(0032) void delay_nms(unsigned int n)       //N ms延时函数
(0033)   {
(0034)    unsigned int i=0;
    0079 2744      CLR	R20
    007A 2755      CLR	R21
(0035)    for (i=0;i<n;i++)
    007B C003      RJMP	0x007F
(0036)    delay_1ms();
    007C DFEF      RCALL	_delay_1ms
    007D 5F4F      SUBI	R20,0xFF
    007E 4F5F      SBCI	R21,0xFF
    007F 1746      CP	R20,R22
    0080 0757      CPC	R21,R23
    0081 F3D0      BCS	0x007C
    0082 940E01E0  CALL	pop_gset2
    0084 9508      RET
FILE: E:\单片机\PROJECT\高精度三维太阳自动跟踪器\程序\传感器控制\1602.h
(0001) 
(0002) /* 用法:
(0003)    LCD_init();
(0004)    LCD_write_string(列,行,"字符串");
(0005)    LCD_write_char(列,行,'字符'); 
(0006)  ---------------------------------------------------------------
(0007) 下面是AVR与LCD连接信息
(0008) PA2 ->RS
(0009) PA3 ->EN
(0010) 地  ->RW
(0011) PA4 ->D4
(0012) PA5 ->D5
(0013) PA6 ->D6
(0014) PA7 ->D7
(0015) 要使用本驱动,改变下面配置信息即可
(0016) -----------------------------------------------------------------*/
(0017) #define LCD_EN_PORT    PORTC   //以下2个要设为同一个口
(0018) #define LCD_EN_DDR     DDRC
(0019) #define LCD_RS_PORT    PORTC   //以下2个要设为同一个口
(0020) #define LCD_RS_DDR     DDRC
(0021) #define LCD_DATA_PORT  PORTA   //以下3个要设为同一个口
(0022) #define LCD_DATA_DDR   DDRA    //一定要用高4位
(0023) #define LCD_DATA_PIN   PINA
(0024) #define LCD_RS         (1<<PC6) //0x04   portC6       out
(0025) #define LCD_EN         (1<<PC7) //0x08   portC7       out
(0026) #define LCD_DATA       ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)) //0xf0   portA4/5/6/7 out
(0027) /*--------------------------------------------------------------------------------------------------
(0028) 函数说明
(0029) --------------------------------------------------------------------------------------------------*/
(0030) void LCD_init(void);
(0031) void LCD_en_write(void);
(0032) void LCD_write_command(unsigned  char command) ;
(0033) void LCD_write_data(unsigned char data);
(0034) void LCD_set_xy (unsigned char x, unsigned char y);
(0035) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
(0036) void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
(0037) 
(0038) //-----------------------------------------------------------------------------------------
(0039) 
(0040) #include <iom16v.h>
(0041) #include <macros.h>
(0042) #include "delay.h"
(0043) 
(0044) void LCD_init(void)         //液晶初始化
(0045) {
(0046)   LCD_DATA_DDR|=LCD_DATA;   //数据口方向为输出
_LCD_init:
    0085 B38A      IN	R24,0x1A
    0086 6F80      ORI	R24,0xF0
    0087 BB8A      OUT	0x1A,R24
(0047)   LCD_EN_DDR|=LCD_EN;       //设置EN方向为输出
    0088 9AA7      SBI	0x14,7
(0048)   LCD_RS_DDR|=LCD_RS;       //设置RS方向为输出
    0089 9AA6      SBI	0x14,6
(0049)   LCD_write_command(0x28); 
    008A E208      LDI	R16,0x28
    008B D014      RCALL	_LCD_write_command
(0050)   LCD_en_write();
    008C D00D      RCALL	_LCD_en_write
(0051)   delay_nus(40);
    008D E208      LDI	R16,0x28
    008E E010      LDI	R17,0
    008F DFCD      RCALL	_delay_nus
(0052)   LCD_write_command(0x28);  //4位显示
    0090 E208      LDI	R16,0x28
    0091 D00E      RCALL	_LCD_write_command
(0053)   LCD_write_command(0x0c);  //显示开
    0092 E00C      LDI	R16,0xC
    0093 D00C      RCALL	_LCD_write_command
(0054)   LCD_write_command(0x01);  //清屏
    0094 E001      LDI	R16,1
    0095 D00A      RCALL	_LCD_write_command
(0055)   delay_nms(2);
    0096 E002      LDI	R16,2
    0097 E010      LDI	R17,0
    0098 DFDD      RCALL	_delay_nms
    0099 9508      RET
(0056) }
(0057) 
(0058) void LCD_en_write(void)  //液晶使能
(0059) {
(0060)   LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
    009A 9AAF      SBI	0x15,7
(0061)   delay_nus(1);
    009B E001      LDI	R16,1
    009C E010      LDI	R17,0
    009D DFBF      RCALL	_delay_nus
(0062)   LCD_EN_PORT&=~LCD_EN;
    009E 98AF      CBI	0x15,7
    009F 9508      RET
_LCD_write_command:
  command              --> R20
    00A0 940E01EE  CALL	push_gset1
    00A2 2F40      MOV	R20,R16
(0063) }
(0064) 
(0065) void LCD_write_command(unsigned char command) //写指令
(0066) {
(0067)   delay_nus(16);
    00A3 E100      LDI	R16,0x10
    00A4 E010      LDI	R17,0
    00A5 DFB7      RCALL	_delay_nus
(0068)   LCD_RS_PORT&=~LCD_RS;        //RS=0
    00A6 98AE      CBI	0x15,6
(0069)   LCD_DATA_PORT&=0X0f;         //清高四位
    00A7 B38B      IN	R24,0x1B
    00A8 708F      ANDI	R24,0xF
    00A9 BB8B      OUT	0x1B,R24
(0070)   LCD_DATA_PORT|=command&0xf0; //写高四位
    00AA 2F84      MOV	R24,R20
    00AB 7F80      ANDI	R24,0xF0
    00AC B22B      IN	R2,0x1B
    00AD 2A28      OR	R2,R24
    00AE BA2B      OUT	0x1B,R2
(0071)   LCD_en_write();
    00AF DFEA      RCALL	_LCD_en_write
(0072)   command=command<<4;          //低四位移到高四位
    00B0 2F84      MOV	R24,R20
    00B1 708F      ANDI	R24,0xF
    00B2 9582      SWAP	R24
    00B3 2F48      MOV	R20,R24
(0073)   LCD_DATA_PORT&=0x0f;         //清高四位
    00B4 B38B      IN	R24,0x1B
    00B5 708F      ANDI	R24,0xF
    00B6 BB8B      OUT	0x1B,R24
(0074)   LCD_DATA_PORT|=command&0xf0; //写低四位
    00B7 2F84      MOV	R24,R20
    00B8 7F80      ANDI	R24,0xF0
    00B9 B22B      IN	R2,0x1B
    00BA 2A28      OR	R2,R24
    00BB BA2B      OUT	0x1B,R2
(0075)   LCD_en_write();
    00BC DFDD      RCALL	_LCD_en_write
    00BD 940E01F1  CALL	pop_gset1
    00BF 9508      RET
_LCD_write_data:
  data                 --> R20
    00C0 940E01EE  CALL	push_gset1
    00C2 2F40      MOV	R20,R16
(0076)   
(0077) }
(0078) 
(0079) void LCD_write_data(unsigned char data) //写数据
(0080) {
(0081)   delay_nus(16);
    00C3 E100      LDI	R16,0x10
    00C4 E010      LDI	R17,0
    00C5 DF97      RCALL	_delay_nus
(0082)   LCD_RS_PORT|=LCD_RS;       //RS=1
    00C6 9AAE      SBI	0x15,6
(0083)   LCD_DATA_PORT&=0X0f;       //清高四位
    00C7 B38B      IN	R24,0x1B
    00C8 708F      ANDI	R24,0xF
    00C9 BB8B      OUT	0x1B,R24
(0084)   LCD_DATA_PORT|=data&0xf0;  //写高四位
    00CA 2F84      MOV	R24,R20
    00CB 7F80      ANDI	R24,0xF0
    00CC B22B      IN	R2,0x1B
    00CD 2A28      OR	R2,R24
    00CE BA2B      OUT	0x1B,R2
(0085)   LCD_en_write();
    00CF DFCA      RCALL	_LCD_en_write
(0086)   data=data<<4;               //低四位移到高四位
    00D0 2F84      MOV	R24,R20
    00D1 708F      ANDI	R24,0xF
    00D2 9582      SWAP	R24
    00D3 2F48      MOV	R20,R24
(0087)   LCD_DATA_PORT&=0X0f;        //清高四位
    00D4 B38B      IN	R24,0x1B
    00D5 708F      ANDI	R24,0xF
    00D6 BB8B      OUT	0x1B,R24
(0088)   LCD_DATA_PORT|=data&0xf0;   //写低四位
    00D7 2F84      MOV	R24,R20
    00D8 7F80      ANDI	R24,0xF0
    00D9 B22B      IN	R2,0x1B
    00DA 2A28      OR	R2,R24
    00DB BA2B      OUT	0x1B,R2
(0089)   LCD_en_write();
    00DC DFBD      RCALL	_LCD_en_write
    00DD 940E01F1  CALL	pop_gset1
    00DF 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R20
  x                    --> R22
    00E0 940E01EC  CALL	push_gset2
    00E2 2F42      MOV	R20,R18
    00E3 2F60      MOV	R22,R16
(0090) }
(0091) 
(0092) 
(0093) void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0094) {
(0095)     unsigned char address;
(0096)     if (y == 0) address = 0x80 + x;
    00E4 2344      TST	R20
    00E5 F419      BNE	0x00E9
    00E6 2F46      MOV	R20,R22
    00E7 5840      SUBI	R20,0x80
    00E8 C002      RJMP	0x00EB
(0097)     else   address = 0xc0 + x;
    00E9 2F46      MOV	R20,R22
    00EA 5440      SUBI	R20,0x40
(0098)     LCD_write_command( address);
    00EB 2F04      MOV	R16,R20
    00EC DFB3      RCALL	_LCD_write_command
    00ED 940E01E0  CALL	pop_gset2
    00EF 9508      RET
_LCD_write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    00F0 940E01EA  CALL	push_gset3
    00F2 2EA2      MOV	R10,R18
    00F3 2F60      MOV	R22,R16
    00F4 814E      LDD	R20,Y+6
    00F5 815F      LDD	R21,Y+7
(0099) }
(0100)   
(0101) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
(0102) {
(0103)     LCD_set_xy( X, Y ); //写地址    
    00F6 2D2A      MOV	R18,R10
    00F7 2F06      MOV	R16,R22
    00F8 DFE7      RCALL	_LCD_set_xy
    00F9 C005      RJMP	0x00FF
(0104)     while (*s)  // 写显示字符
(0105)     {
(0106)       LCD_write_data( *s );
    00FA 01FA      MOVW	R30,R20
    00FB 8100      LDD	R16,Z+0
    00FC DFC3      RCALL	_LCD_write_data
(0107)       s ++;
    00FD 5F4F      SUBI	R20,0xFF
    00FE 4F5F      SBCI	R21,0xFF
    00FF 01FA      MOVW	R30,R20
    0100 8020      LDD	R2,Z+0
    0101 2022      TST	R2

⌨️ 快捷键说明

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