📄 595_1602_example.lst
字号:
__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 + -