📄 smg12232zk.lst
字号:
__start:
__text_start:
0022 EFCF LDI R28,0xFF
0023 E0D2 LDI R29,2
0024 BFCD OUT 0x3D,R28
0025 BFDE OUT 0x3E,R29
0026 51C0 SUBI R28,0x10
0027 40D0 SBCI R29,0
0028 EA0A LDI R16,0xAA
0029 8308 STD Y+0,R16
002A 2400 CLR R0
002B E1E0 LDI R30,0x10
002C E0F1 LDI R31,1
002D E011 LDI R17,1
002E 32E4 CPI R30,0x24
002F 07F1 CPC R31,R17
0030 F011 BEQ 0x0033
0031 9201 ST R0,Z+
0032 CFFB RJMP 0x002E
0033 8300 STD Z+0,R16
0034 E3E4 LDI R30,0x34
0035 E0F0 LDI R31,0
0036 E0A0 LDI R26,0
0037 E0B1 LDI R27,1
0038 E010 LDI R17,0
0039 34E4 CPI R30,0x44
003A 07F1 CPC R31,R17
003B F021 BEQ 0x0040
003C 95C8 LPM
003D 9631 ADIW R30,1
003E 920D ST R0,X+
003F CFF9 RJMP 0x0039
0040 D055 RCALL _main
_exit:
0041 CFFF RJMP _exit
FILE: D:\SOURCE~1\avr\avr48\smg12232zk\initrialm48.h
(0001) //ICC-AVR application builder : 2007-7-5 15:30:50
(0002) // Target : M48
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) void Port_Init(void);
(0006) void Init_Devices(void);
(0007)
(0008)
(0009) void Port_Init(void)
(0010) {
(0011) PORTB = 0xFF;
_Port_Init:
0042 EF8F LDI R24,0xFF
0043 B985 OUT 0x05,R24
(0012) DDRB = 0xFF;
0044 B984 OUT 0x04,R24
(0013) PORTC = 0x6F; //m103 output only
0045 E68F LDI R24,0x6F
0046 B988 OUT 0x08,R24
(0014) DDRC = 0x6F;
0047 B987 OUT 0x07,R24
(0015) PORTD = 0xFF;
0048 EF8F LDI R24,0xFF
0049 B98B OUT 0x0B,R24
(0016) DDRD = 0xFF;
004A B98A OUT 0x0A,R24
004B 9508 RET
(0017) }
(0018)
(0019) //call this routine to initialize all peripherals
(0020) void Init_Devices(void)
(0021) {
(0022) //stop errant interrupts until set up
(0023) CLI(); //disable all interrupts
_Init_Devices:
004C 94F8 BCLR 7
(0024) Port_Init();
004D DFF4 RCALL _Port_Init
(0025)
(0026)
(0027) SEI(); //re-enable interrupts
004E 9478 BSET 7
004F 9508 RET
FILE: D:\SOURCE~1\avr\avr48\smg12232zk\delay.h
(0001) #ifndef _DELAY_H
(0002) #define _DELAY_H
(0003)
(0004) // mcu:avr crystal=8MHz
(0005)
(0006) /**************************************************************
(0007) **函数功能:延时1us
(0008) **输入参数:无
(0009) **返回值:无
(0010) **在本函数外定义变量:无
(0011) **调用的函数:NOP()
(0012) **************************************************************/
(0013) void Delay_1us(void);
(0014)
(0015) /**************************************************************
(0016) **函数功能:us级延时
(0017) **输入参数:xus:延时us数
(0018) **返回值:无
(0019) **在本函数外定义变量:无
(0020) **调用的函数:Delay_1us()
(0021) **************************************************************/
(0022) void Delay_Us(unsigned char xus);
(0023)
(0024) /**************************************************************
(0025) **函数功能:延时1ms
(0026) **输入参数:无
(0027) **返回值:无
(0028) **在本函数外定义变量:无
(0029) **调用的函数:NOP()
(0030) **************************************************************/
(0031) void Delay_1ms(void);
(0032)
(0033) /**************************************************************
(0034) **函数功能:ms级延时
(0035) **输入参数:xms:延时ms数
(0036) **返回值:无
(0037) **在本函数外定义变量:无
(0038) **调用的函数:Delay_1ms()
(0039) **************************************************************/
(0040) void Delay_Ms(unsigned int xms);
(0041)
(0042) /**************************************************************
(0043) **函数功能:10us级延时
(0044) **输入参数:x10us:延时x10us数
(0045) **返回值:无
(0046) **在本函数外定义变量:无
(0047) **调用的函数:无
(0048) **************************************************************/
(0049) void Delay_X10us(Word x10us);
(0050)
(0051)
(0052) void Delay_1us()
(0053) {
(0054) NOP();
_Delay_1us:
0050 0000 NOP
0051 9508 RET
_Delay_Us:
i --> R20
xus --> R22
0052 D21C RCALL push_gset2
0053 2F60 MOV R22,R16
(0055) }
(0056)
(0057) void Delay_Us(unsigned char xus)//crystal=8MHz
(0058) {
(0059) unsigned char i;
(0060) for(i=0;i<xus;i++)
0054 2744 CLR R20
0055 C002 RJMP 0x0058
(0061) Delay_1us();
0056 DFF9 RCALL _Delay_1us
0057 9543 INC R20
0058 1746 CP R20,R22
0059 F3E0 BCS 0x0056
005A D20A RCALL pop_gset2
005B 9508 RET
(0062) }
(0063)
(0064) void Delay_1ms(void)//crystal=8MHz
(0065) {
(0066) unsigned int i;
(0067) for(i=0;i<1142;i++)
_Delay_1ms:
i --> R16
005C 2700 CLR R16
005D 2711 CLR R17
005E C002 RJMP 0x0061
005F 5F0F SUBI R16,0xFF
0060 4F1F SBCI R17,0xFF
0061 3706 CPI R16,0x76
0062 E0E4 LDI R30,4
0063 071E CPC R17,R30
0064 F3D0 BCS 0x005F
0065 9508 RET
_Delay_Ms:
i --> R20
j --> R22
xms --> R16
0066 D208 RCALL push_gset2
(0068) ;
(0069) }
(0070)
(0071) void Delay_Ms(Word xms) //crystal=8MHz
(0072) {
(0073) Word i,j; //variable:declare Word
(0074) for(i=0; i<xms; i++)
0067 2744 CLR R20
0068 2755 CLR R21
0069 C014 RJMP 0x007E
(0075) for(j=0; j<498;j++)
006A 2766 CLR R22
006B 2777 CLR R23
006C C00B RJMP 0x0078
(0076) {
(0077) NOP();
006D 0000 NOP
(0078) NOP();
006E 0000 NOP
(0079) NOP();
006F 0000 NOP
(0080) NOP();
0070 0000 NOP
(0081) NOP();
0071 0000 NOP
(0082) NOP();
0072 0000 NOP
(0083) NOP();
0073 0000 NOP
(0084) NOP();
0074 0000 NOP
(0085) NOP();
0075 0000 NOP
0076 5F6F SUBI R22,0xFF
0077 4F7F SBCI R23,0xFF
0078 3F62 CPI R22,0xF2
0079 E0E1 LDI R30,1
007A 077E CPC R23,R30
007B F388 BCS 0x006D
007C 5F4F SUBI R20,0xFF
007D 4F5F SBCI R21,0xFF
007E 1740 CP R20,R16
007F 0751 CPC R21,R17
0080 F348 BCS 0x006A
0081 D1E3 RCALL pop_gset2
0082 9508 RET
_Delay_X10us:
i --> R20
j --> R22
x10us --> R16
0083 D1EB RCALL push_gset2
(0086) }
(0087) }
(0088)
(0089) void Delay_X10us(Word x10us)//crystal=8MHz
(0090) {
(0091) Word i;Byte j; //variable:declare Word
(0092) for(i=0; i<x10us; i++)
0084 2744 CLR R20
0085 2755 CLR R21
0086 C00A RJMP 0x0091
(0093) {
(0094) for(j=0;j<2;j++)
0087 2766 CLR R22
0088 C004 RJMP 0x008D
(0095) {
(0096) NOP();
0089 0000 NOP
(0097) NOP();
008A 0000 NOP
(0098) NOP();
008B 0000 NOP
008C 9563 INC R22
008D 3062 CPI R22,2
008E F3D0 BCS 0x0089
008F 5F4F SUBI R20,0xFF
0090 4F5F SBCI R21,0xFF
0091 1740 CP R20,R16
0092 0751 CPC R21,R17
0093 F398 BCS 0x0087
0094 D1D0 RCALL pop_gset2
0095 9508 RET
_main:
i --> Y+6
0096 9725 SBIW R28,5
FILE: D:\SOURCE~1\avr\avr48\smg12232zk\main.c
(0001)
(0002) /****************** SMG12232ZK串行接口程序******************
(0003) *ICC-AVR application builder : 2007-10-18
(0004) * Target : M8
(0005) * Crystal: 8.0000Mhz
(0006)
(0007) * Title : Accessing to LCD-CONTROLLER
(0008) * Date : 2007-10-18
(0009) * Support QQ: 16693799
(0010) * Create by : Joe Yuan
(0011) * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER */
(0012)
(0013)
(0014)
(0015) #include <iom48v.h> //ATMEGA48头文件
(0016) #include <macros.h> //宏定义
(0017) #include "initrialm48.h"//初始化mcu
(0018) #include "define.h" //端口定义
(0019) #include "delay.h" //延时程序
(0020)
(0021)
(0022) #define LCD_PORT PORTD
(0023) #define LCD_DDR DDRD
(0024) #define LCD_SCLK PD0
(0025) #define LCD_CS PD2
(0026) #define LCD_STD PD1
(0027)
(0028)
(0029) #define LCD_CS_H LCD_PORT |= BIT(LCD_CS)
(0030) #define LCD_CS_L LCD_PORT &=~ BIT(LCD_CS)
(0031) #define LCD_STD_H LCD_PORT |= BIT(LCD_STD)
(0032) #define LCD_STD_L LCD_PORT &=~ BIT(LCD_STD)
(0033) #define LCD_SCLK_H LCD_PORT |= BIT(LCD_SCLK)
(0034) #define LCD_SCLK_L LCD_PORT &=~ BIT(LCD_SCLK)
(0035)
(0036)
(0037)
(0038) void Send_8bit(Word x);//串行发送8位数据
(0039) void Lcd_Write(Byte start,Byte data);//模块写入子程序
(0040) void Lcd_Reset(void);//模块复位子程序
(0041) void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
(0042) void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度
(0043)
(0044) Byte lcd_buf[10];//数据显示数组
(0045) Byte *pointer;
(0046) Long lcd_data1;
(0047) Long lcd_data2;
(0048)
(0049)
(0050) void main(void)
(0051) {
(0052) Word i;
(0053) Init_Devices();
0097 DFB4 RCALL _Init_Devices
(0054) Lcd_Reset();
0098 D109 RCALL _Lcd_Reset
(0055) Hzk_Dis_Words(1,1,"袁自刚:16693799");
0099 E080 LDI R24,0
009A E091 LDI R25,1
009B 8399 STD Y+1,R25
009C 8388 STD Y+0,R24
009D E021 LDI R18,1
009E E001 LDI R16,1
009F D059 RCALL _Hzk_Dis_Words
00A0 C055 RJMP 0x00F6
(0056) while(1)
(0057) {
(0058) Hzk_Dis_Data(2,1,lcd_data1,7);
00A1 E087 LDI R24,7
00A2 838C STD Y+4,R24
00A3 90400116 LDS R4,lcd_data1+2
00A5 90500117 LDS R5,lcd_data1+3
00A7 90200114 LDS R2,lcd_data1
00A9 90300115 LDS R3,lcd_data1+1
00AB 8228 STD Y+0,R2
00AC 8239 STD Y+1,R3
00AD 824A STD Y+2,R4
00AE 825B STD Y+3,R5
00AF E021 LDI R18,1
00B0 E002 LDI R16,2
00B1 D079 RCALL _Hzk_Dis_Data
(0059) lcd_data1 ++;
00B2 E041 LDI R20,1
00B3 E050 LDI R21,0
00B4 E060 LDI R22,0
00B5 E070 LDI R23,0
00B6 90400116 LDS R4,lcd_data1+2
00B8 90500117 LDS R5,lcd_data1+3
00BA 90200114 LDS R2,lcd_data1
00BC 90300115 LDS R3,lcd_data1+1
00BE 0E24 ADD R2,R20
00BF 1E35 ADC R3,R21
00C0 1E46 ADC R4,R22
00C1 1E57 ADC R5,R23
00C2 92300115 STS lcd_data1+1,R3
00C4 92200114 STS lcd_data1,R2
00C6 92500117 STS lcd_data1+3,R5
00C8 92400116 STS lcd_data1+2,R4
(0060)
(0061) Hzk_Dis_Data(2,5,lcd_data2,7);
00CA E087 LDI R24,7
00CB 838C STD Y+4,R24
00CC 90400112 LDS R4,lcd_data2+2
00CE 90500113 LDS R5,lcd_data2+3
00D0 90200110 LDS R2,lcd_data2
00D2 90300111 LDS R3,lcd_data2+1
00D4 8228 STD Y+0,R2
00D5 8239 STD Y+1,R3
00D6 824A STD Y+2,R4
00D7 825B STD Y+3,R5
00D8 E025 LDI R18,5
00D9 E002 LDI R16,2
00DA D050 RCALL _Hzk_Dis_Data
(0062) lcd_data2 ++;
00DB E041 LDI R20,1
00DC E050 LDI R21,0
00DD E060 LDI R22,0
00DE E070 LDI R23,0
00DF 90400112 LDS R4,lcd_data2+2
00E1 90500113 LDS R5,lcd_data2+3
00E3 90200110 LDS R2,lcd_data2
00E5 90300111 LDS R3,lcd_data2+1
00E7 0E24 ADD R2,R20
00E8 1E35 ADC R3,R21
00E9 1E46 ADC R4,R22
00EA 1E57 ADC R5,R23
00EB 92300111 STS lcd_data2+1,R3
00ED 92200110 STS lcd_data2,R2
00EF 92500113 STS lcd_data2+3,R5
00F1 92400112 STS lcd_data2+2,R4
(0063) Delay_Ms(300);
00F3 E20C LDI R16,0x2C
00F4 E011 LDI R17,1
00F5 DF70 RCALL _Delay_Ms
00F6 CFAA RJMP 0x00A1
00F7 9625 ADIW R28,5
00F8 9508 RET
_Hzk_Dis_Words:
ram_address --> R10
i --> R20
lcd_pointer --> R22
xpos --> R12
ypos --> R14
00F9 D16F RCALL push_gset5
00FA 2EC2 MOV R12,R18
00FB 2EE0 MOV R14,R16
00FC 856A LDD R22,Y+10
00FD 857B LDD R23,Y+11
(0064) }
(0065)
(0066) }
(0067) /****************发送汉字子程序******************
(0068) ** xpos为列数,ypos为行数
(0069) **lcd_pointer为字符串首地址
(0070) *********************************************************/
(0071) void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度
(0072) {
(0073) Byte i=0,ram_address;//ram_address:首地址
00FE 2744 CLR R20
00FF C001 RJMP 0x0101
(0074) //首先判断字符串得长度
(0075) while(*(lcd_pointer+i) != '\0')//字符串长度
(0076) {
(0077) i++;
0100 9543 INC R20
0101 2FE4 MOV R30,R20
0102 27FF CLR R31
0103 0FE6 ADD R30,R22
0104 1FF7 ADC R31,R23
0105 8020 LDD R2,Z+0
0106 2022 TST R2
0107 F7C1 BNE 0x0100
(0078) }//i=字符串长度
(0079) if(i>15)
0108 E08F LDI R24,0xF
0109 1784 CP R24,R20
010A F408 BCC 0x010C
(0080) {
(0081) i=15;
010B E04F LDI R20,0xF
(0082) }
(0083) if(ypos==1)
010C 2D8E MOV R24,R14
010D 3081 CPI R24,1
010E F429 BNE 0x0114
(0084) {
(0085) ram_address = 0x80+xpos-1;
010F 2D8C MOV R24,R12
0110 5880 SUBI R24,0x80
0111 5081 SUBI R24,1
0112 2EA8 MOV R10,R24
(0086) }
0113 C007 RJMP 0x011B
(0087) else if(ypos==2)
0114 2D8E MOV R24,R14
0115 3082 CPI R24,2
0116 F421 BNE 0x011B
(0088) {
(0089) ram_address = 0x90+xpos-1;
0117 2D8C MOV R24,R12
0118 5780 SUBI R24,0x70
0119 5081 SUBI R24,1
011A 2EA8 MOV R10,R24
(0090) }
(0091) Lcd_Write(0xf8,ram_address);
011B 2D2A MOV R18,R10
011C EF08 LDI R16,0xF8
011D D099 RCALL _Lcd_Write
(0092) for(;i>0;i--)
011E C007 RJMP 0x0126
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -