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

📄 595_1602_example.lst

📁 ATMEGA8做的595驱动1602
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    0046 E5CF      LDI	R28,0x5F
    0047 E0D4      LDI	R29,4
    0048 BFCD      OUT	0x3D,R28
    0049 BFDE      OUT	0x3E,R29
    004A 58C0      SUBI	R28,0x80
    004B 40D0      SBCI	R29,0
    004C EA0A      LDI	R16,0xAA
    004D 8308      STD	Y+0,R16
    004E 2400      CLR	R0
    004F EBE6      LDI	R30,0xB6
    0050 E0F0      LDI	R31,0
    0051 E010      LDI	R17,0
    0052 3CE2      CPI	R30,0xC2
    0053 07F1      CPC	R31,R17
    0054 F011      BEQ	0x0057
    0055 9201      ST	R0,Z+
    0056 CFFB      RJMP	0x0052
    0057 8300      STD	Z+0,R16
    0058 E3E6      LDI	R30,0x36
    0059 E0F0      LDI	R31,0
    005A E6A0      LDI	R26,0x60
    005B E0B0      LDI	R27,0
    005C E010      LDI	R17,0
    005D 38EC      CPI	R30,0x8C
    005E 07F1      CPC	R31,R17
    005F F021      BEQ	0x0064
    0060 95C8      LPM
    0061 9631      ADIW	R30,1
    0062 920D      ST	R0,X+
    0063 CFF9      RJMP	0x005D
    0064 D24B      RCALL	_main
_exit:
    0065 CFFF      RJMP	_exit
FILE: G:\单片机\源程序\串行1602\595_1602_Example\RD_ATMega8L.h
(0001) #ifndef _Use_AdvancedPortCommand
(0002) # define _Use_AdvancedPortCommand
(0003) /***********************************************************
(0004) *  支持库名: ATMage8L Bit Driver                           *
(0005) *  源文件:   RD_ATMage162L.h                               *
(0006) *  版本:     v1.1                                          *
(0007) *  说明:    使用通用机器人通用引擎的底层驱动程序          *
(0008) *                                                          *
(0009) *  作者:    傻孩子                                        *
(0010) *  日期:    2005年10月8日                                 *
(0011) *  修改:    傻孩子                                        *
(0012) *  修改时间: 2005年10月8日                                 *
(0013) ***********************************************************/
(0014) # include <iom8v.h>
(0015) # include <macros.h>
(0016) 
(0017) /****************************
(0018) *        资源说明           *
(0019) ****************************/
(0020) # define PAInUse        0x00
(0021) # define PBInUse        0xff
(0022) # define PCInUse        0xff
(0023) # define PDInUse        0xff
(0024) # define PEInUse        0x00
(0025) # define PFInUse        0x00
(0026) # define PGInUse        0x00
(0027) # define PHInUse        0x00
(0028) # define PIInUse        0x00
(0029) # define PJInUse        0x00
(0030) # define PKInUse        0x00
(0031) # define PLInUse        0x00
(0032) # define PMInUse        0x00
(0033) # define PNInUse        0x00
(0034) # define POInUse        0x00
(0035) # define PPInUse        0x00
(0036) # define PQInUse        0x00
(0037) # define PRInUse        0x00
(0038) # define PSInUse        0x00
(0039) # define PTInUse        0x00
(0040) # define PUInUse        0x00
(0041) # define PVInUse        0x00
(0042) # define PWInUse        0x00
(0043) # define PXInUse        0x00
(0044) # define PYInUse        0x00
(0045) # define PZInUse        0x00
(0046) 
(0047) /****************************
(0048) *       端口宏定义          *
(0049) ****************************/
(0050) 
(0051) # define Read_PB0       ((PINB<<7)>>7)
(0052) # define Read_PB1       ((PINB<<6)>>7)
(0053) # define Read_PB2       ((PINB<<5)>>7)
(0054) # define Read_PB3       ((PINB<<4)>>7)
(0055) # define Read_PB4       ((PINB<<3)>>7)
(0056) # define Read_PB5       ((PINB<<2)>>7)
(0057) # define Read_PB6       ((PINB<<1)>>7)
(0058) # define Read_PB7       (PINB>>7)
(0059) 
(0060) # define Read_PC0       ((PINC<<7)>>7)
(0061) # define Read_PC1       ((PINC<<6)>>7)
(0062) # define Read_PC2       ((PINC<<5)>>7)
(0063) # define Read_PC3       ((PINC<<4)>>7)
(0064) # define Read_PC4       ((PINC<<3)>>7)
(0065) # define Read_PC5       ((PINC<<2)>>7)
(0066) # define Read_PC6       ((PINC<<1)>>7)
(0067) # define Read_PC7       (PINC>>7)
(0068) 
(0069) # define Read_PD0       ((PIND<<7)>>7)
(0070) # define Read_PD1       ((PIND<<6)>>7)
(0071) # define Read_PD2       ((PIND<<5)>>7)
(0072) # define Read_PD3       ((PIND<<4)>>7)
(0073) # define Read_PD4       ((PIND<<3)>>7)
(0074) # define Read_PD5       ((PIND<<2)>>7)
(0075) # define Read_PD6       ((PIND<<1)>>7)
(0076) # define Read_PD7       (PIND>>7)
(0077) 
(0078) /****************************
(0079) *     高级端口宏定义        *
(0080) ****************************/
(0081) struct PORTBIT
(0082) {
(0083)     unsigned Bit0:1;
(0084) 	unsigned Bit1:1;
(0085)     unsigned Bit2:1;
(0086) 	unsigned Bit3:1;
(0087)     unsigned Bit4:1;
(0088) 	unsigned Bit5:1;
(0089)     unsigned Bit6:1;
(0090) 	unsigned Bit7:1;	
(0091) }*PORTB_BIT,*PORTC_BIT,*PORTD_BIT,
(0092)  *DDRB_BIT,*DDRC_BIT,*DDRD_BIT;
(0093) 
(0094) /***********************************************************
(0095) *  函数说明:高级端口扩展初始化                            *
(0096) ***********************************************************/
(0097) void PORTDefine(void)
(0098) {
(0099) 
(0100)     PORTB_BIT = ( struct PORTBIT *)0x38;
_PORTDefine:
    0066 E388      LDI	R24,0x38
    0067 E090      LDI	R25,0
    0068 939000C1  STS	PORTB_BIT+1,R25
    006A 938000C0  STS	PORTB_BIT,R24
(0101)     PORTC_BIT = ( struct PORTBIT *)0x35;
    006C E385      LDI	R24,0x35
    006D 939000BF  STS	PORTC_BIT+1,R25
    006F 938000BE  STS	PORTC_BIT,R24
(0102)     PORTD_BIT = ( struct PORTBIT *)0x32;
    0071 E382      LDI	R24,0x32
    0072 939000BD  STS	PORTD_BIT+1,R25
    0074 938000BC  STS	PORTD_BIT,R24
(0103) 
(0104) 	DDRB_BIT = ( struct PORTBIT *)0x37;
    0076 E387      LDI	R24,0x37
    0077 939000BB  STS	DDRB_BIT+1,R25
    0079 938000BA  STS	DDRB_BIT,R24
(0105) 	DDRC_BIT = ( struct PORTBIT *)0x34;
    007B E384      LDI	R24,0x34
    007C 939000B9  STS	DDRC_BIT+1,R25
    007E 938000B8  STS	DDRC_BIT,R24
(0106) 	DDRD_BIT = ( struct PORTBIT *)0x31;
    0080 E381      LDI	R24,0x31
    0081 939000B7  STS	DDRD_BIT+1,R25
    0083 938000B6  STS	DDRD_BIT,R24
    0085 9508      RET
_setBIT:
  BIT                  --> R20
    0086 D26D      RCALL	push_gset1
    0087 2F40      MOV	R20,R16
FILE: G:\单片机\源程序\串行1602\595_1602_Example\SerialToCollateral.h
(0001) #ifndef _Use_SerialToCollateral
(0002) # define _Use_SerialToCollateral
(0003) /********************************************************
(0004) *  函数库说明:串行输出转为并行输出基本函数库           *
(0005) *  版本:      v1.0                                     *
(0006) *  作者:      傻孩子                                   *
(0007) *  日期:      2006年1月7日                             *
(0008) *  修改:      傻孩子                                   *
(0009) *  修改日期:  2006年2月09日                            *
(0010) *                                                       *
(0011) *  [说明]                                               *
(0012) *          1、该头文件通过3根线连接到595实现对级联的    *
(0013) *             595进行驱动,达到扩展输出端口的作用。     *
(0014) *          2、基本支持单595和2个595级联的情况,并允许   *
(0015) *             在头文件外部自定义多个595级联的情况。当   *
(0016) *             使用外部自定义多级595连接时,只需要定义   *
(0017) *             相应的位段和虚拟端口变量即可。支持位操作  *
(0018) *          3、使用的时候,可以通过查询扫描的方式,也    *
(0019) *             可以在修改虚拟端口值以后通过调用函数      *
(0020) *             refreshVirtualPORT()来即时刷新(推荐)。    *
(0021) ********************************************************/
(0022) 
(0023) /***********************
(0024) *    系 统 宏 定 义    *
(0025) ***********************/
(0026) 
(0027) /*---------------------*
(0028) *    常 数 宏 定 义    *
(0029) *---------------------*/
(0030) #ifndef True
(0031)     # define True       0x01
(0032) #endif
(0033) #ifndef False
(0034)     # define False      0x00
(0035) #endif
(0036) #ifndef NULL
(0037)     # define NULL       0x00
(0038) #endif
(0039) #ifndef Enable
(0040)     # define Enable     0x00
(0041) #endif
(0042) #ifndef Disable
(0043)     # define Disable    0x01
(0044) #endif
(0045) 
(0046) #ifdef _Use_8Bit_VitualPORT
(0047)     struct VirtualPORT
(0048) 	{
(0049) 	    unsigned BIT0:1;
(0050) 		unsigned BIT1:1;
(0051) 		unsigned BIT2:1;
(0052) 		unsigned BIT3:1;
(0053) 		unsigned BIT4:1;
(0054) 		unsigned BIT5:1;
(0055) 		unsigned BIT6:1;
(0056) 		unsigned BIT7:1;
(0057) 	};
(0058) 	
(0059) 	# define VIRTUAL_BIT_COUNT 8
(0060) #endif
(0061) #ifdef _Use_16Bit_VitualPORT
(0062) 	struct VirtualPORT
(0063) 	{
(0064) 	    unsigned BIT0:1;
(0065) 		unsigned BIT1:1;
(0066) 		unsigned BIT2:1;
(0067) 		unsigned BIT3:1;
(0068) 		unsigned BIT4:1;
(0069) 		unsigned BIT5:1;
(0070) 		unsigned BIT6:1;
(0071) 		unsigned BIT7:1;
(0072) 		
(0073) 		unsigned BIT8:1;
(0074) 		unsigned BIT9:1;
(0075) 		unsigned BIT10:1;
(0076) 		unsigned BIT11:1;
(0077) 		unsigned BIT12:1;
(0078) 		unsigned BIT13:1;
(0079) 		unsigned BIT14:1;
(0080) 		unsigned BIT15:1;
(0081) 	};
(0082) 	# define VIRTUAL_BIT_COUNT 16
(0083) #endif
(0084) 
(0085) /*---------------------*
(0086) *    动 作 宏 定 义    *
(0087) *---------------------*/
(0088) #ifndef VRCK
(0089)     # define VRCK       _PB1
(0090) #endif
(0091) #ifndef VSCK
(0092)     # define VSCK       _PB2
(0093) #endif
(0094) #ifndef VSI
(0095)     # define VSI        _PB3
(0096) #endif
(0097) /***********************
(0098) *    全局变量声明区    *
(0099) ***********************/
(0100) #if (VIRTUAL_BIT_COUNT == 8)
(0101)     char VPORT = 0;
(0102) 	
(0103) 	# define PV0        (*VPORTBit).BIT0
(0104) 	# define PV1        (*VPORTBit).BIT1
(0105) 	# define PV2        (*VPORTBit).BIT2
(0106) 	# define PV3        (*VPORTBit).BIT3
(0107) 	# define PV4        (*VPORTBit).BIT4
(0108) 	# define PV5        (*VPORTBit).BIT5
(0109) 	# define PV6        (*VPORTBit).BIT6
(0110) 	# define PV7        (*VPORTBit).BIT7
(0111) 	
(0112) #endif
(0113) #if (VIRTUAL_BIT_COUNT == 16)
(0114)     unsigned int VPORT = 0;
(0115) 	
(0116) 	# define PV0        (*VPORTBit).BIT0
(0117) 	# define PV1        (*VPORTBit).BIT1
(0118) 	# define PV2        (*VPORTBit).BIT2
(0119) 	# define PV3        (*VPORTBit).BIT3
(0120) 	# define PV4        (*VPORTBit).BIT4
(0121) 	# define PV5        (*VPORTBit).BIT5
(0122) 	# define PV6        (*VPORTBit).BIT6
(0123) 	# define PV7        (*VPORTBit).BIT7
(0124) 	
(0125) 	# define PV8        (*VPORTBit).BIT8
(0126) 	# define PV9        (*VPORTBit).BIT9
(0127) 	# define PV10       (*VPORTBit).BIT10
(0128) 	# define PV11       (*VPORTBit).BIT11
(0129) 	# define PV12       (*VPORTBit).BIT12
(0130) 	# define PV13       (*VPORTBit).BIT13
(0131) 	# define PV14       (*VPORTBit).BIT14
(0132) 	# define PV15       (*VPORTBit).BIT15
(0133) 	
(0134) #endif
(0135) struct VirtualPORT *VPORTBit = (struct VirtualPORT *)&(VPORT);
(0136) 
(0137) char IfPortChange = False;
(0138) /***********************
(0139) *    系统函数声明区    *
(0140) ***********************/
(0141) void refreshVirtualPORT(void);
(0142) void sendBITS(char Data);
(0143) void VirtualPORTProccess(void);
(0144) char setBIT(char BIT);
(0145) char clearBIT(char BIT);
(0146) 
(0147) /********************************************************
(0148) *  函数说明:虚拟端口置位函数                           *
(0149) *  输入:    位编号                                     *
(0150) *  输出:    操作是否成功                               *
(0151) ********************************************************/
(0152) char setBIT(char BIT)
(0153) {
(0154)     if (BIT >= VIRTUAL_BIT_COUNT)
    0088 3048      CPI	R20,0x8
    0089 F010      BCS	0x008C
(0155) 	{
(0156) 	    return False;
    008A 2700      CLR	R16
    008B C00D      RJMP	0x0099
(0157) 	}
(0158) 	
(0159) 	VPORT |= 1<<BIT;
    008C E001      LDI	R16,1
    008D 2F14      MOV	R17,R20
    008E D288      RCALL	lsl8
    008F 90200060  LDS	R2,VPORT
    0091 2A20      OR	R2,R16
    0092 92200060  STS	VPORT,R2
(0160) 	IfPortChange = True;
    0094 E081      LDI	R24,1
    0095 93800063  STS	IfPortChange,R24
(0161) 	VirtualPORTProccess();                               //刷新端口
    0097 D01A      RCALL	_VirtualPORTProccess
(0162) 	return True;
    0098 E001      LDI	R16,1
    0099 D25D      RCALL	pop_gset1
    009A 9508      RET
_clearBIT:
  BIT                  --> R20
    009B D258      RCALL	push_gset1
    009C 2F40      MOV	R20,R16
(0163) }
(0164) 
(0165) /********************************************************
(0166) *  函数说明:虚拟端口清零函数                           *
(0167) *  输入:    位编号                                     *
(0168) *  输出:    操作是否成功                               *
(0169) ********************************************************/
(0170) char clearBIT(char BIT)
(0171) {
(0172)     if (BIT >= VIRTUAL_BIT_COUNT)
    009D 3048      CPI	R20,0x8
    009E F010      BCS	0x00A1
(0173) 	{
(0174) 	    return False;
    009F 2700      CLR	R16
    00A0 C00F      RJMP	0x00B0
(0175) 	}
(0176) 	
(0177) 	VPORT &= ~(1<<BIT);
    00A1 E001      LDI	R16,1
    00A2 2F14      MOV	R17,R20
    00A3 D273      RCALL	lsl8
    00A4 2E20      MOV	R2,R16
    00A5 9420      COM	R2
    00A6 90300060  LDS	R3,VPORT
    00A8 2032      AND	R3,R2
    00A9 92300060  STS	VPORT,R3
(0178) 	IfPortChange = True;
    00AB E081      LDI	R24,1
    00AC 93800063  STS	IfPortChange,R24
(0179) 	VirtualPORTProccess();                               //刷新端口
    00AE D003      RCALL	_VirtualPORTProccess
(0180) 	return True;
    00AF E001      LDI	R16,1
    00B0 D246      RCALL	pop_gset1
    00B1 9508      RET
(0181) }
(0182) 
(0183) /********************************************************
(0184) *  函数说明:虚拟端口处理程序                           *
(0185) ********************************************************/
(0186) void VirtualPORTProccess(void)
(0187) {
(0188)     if (IfPortChange)
_VirtualPORTProccess:
    00B2 90200063  LDS	R2,IfPortChange
    00B4 2022      TST	R2
    00B5 F021      BEQ	0x00BA
(0189) 	{
(0190) 	    refreshVirtualPORT();
    00B6 D004      RCALL	_refreshVirtualPORT
(0191) 		IfPortChange = False;
    00B7 2422      CLR	R2
    00B8 92200063  STS	IfPortChange,R2
(0192) 	}
    00BA 9508      RET
_refreshVirtualPORT:
  TempData             --> R20
  n                    --> R22
    00BB D236      RCALL	push_gset2
(0193) }
(0194) 
(0195) /********************************************************
(0196) *  函数说明:刷新虚拟端口函数                           *
(0197) ********************************************************/
(0198) void refreshVirtualPORT(void)
(0199) {
(0200) 	char n = 0;
    00BC 2766      CLR	R22
(0201) 	char TempData = 0;
    00BD 2744      CLR	R20
    00BE D270      RCALL	0x032F
(0202) 	
(0203) 	VRCK = 0;
    00BF 7F87      ANDI	R24,0xF7
    00C0 8380      STD	Z+0,R24
(0204) 	for (n=0;n<(VIRTUAL_BIT_COUNT>>3);n++)
    00C1 C00A      RJMP	0x00CC
(0205) 	{
(0206) 	    TempData = (VPORT<<(n<<3))>>(VIRTUAL_BIT_COUNT-8);
    00C2 2F16      MOV	R17,R22
    00C3 0F11      LSL	R17
    00C4 0F11      LSL	R17
    00C5 0F11      LSL	R17
    00C6 91000060  LDS	R16,VPORT
    00C8 D24E      RCALL	lsl8
    00C9 2F40      MOV	R20,R16
(0207) 		sendBITS(TempData);

⌨️ 快捷键说明

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