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

📄 sle4442.lst

📁 万年历挂钟系统源程序,附语句模块功能说明,iccavr环境编程
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0020 E5CF      LDI	R28,0x5F
    0021 E0D2      LDI	R29,2
    0022 BFCD      OUT	0x3D,R28
    0023 BFDE      OUT	0x3E,R29
    0024 51C0      SUBI	R28,0x10
    0025 40D0      SBCI	R29,0
    0026 EA0A      LDI	R16,0xAA
    0027 8308      STD	Y+0,R16
    0028 2400      CLR	R0
    0029 E7E8      LDI	R30,0x78
    002A E0F0      LDI	R31,0
    002B E010      LDI	R17,0
    002C 39E8      CPI	R30,0x98
    002D 07F1      CPC	R31,R17
    002E F011      BEQ	0x0031
    002F 9201      ST	R0,Z+
    0030 CFFB      RJMP	0x002C
    0031 8300      STD	Z+0,R16
    0032 E2E8      LDI	R30,0x28
    0033 E0F0      LDI	R31,0
    0034 E6A0      LDI	R26,0x60
    0035 E0B0      LDI	R27,0
    0036 E010      LDI	R17,0
    0037 34E0      CPI	R30,0x40
    0038 07F1      CPC	R31,R17
    0039 F021      BEQ	0x003E
    003A 95C8      LPM
    003B 9631      ADIW	R30,1
    003C 920D      ST	R0,X+
    003D CFF9      RJMP	0x0037
    003E D571      RCALL	_main
_exit:
    003F CFFF      RJMP	_exit
FILE: E:\张军\AVR\光盘内容\实例源文件\第六章程序\SSLE4442.c
(0001) //*********************FileName:Main.c*********************//
(0002) //*********************Author:Steaven2000@163.com**********//
(0003) //********************Version:1.2*************************//
(0004) //******************LastUpdate:2004-11-03*****************//
(0005) 
(0006) #include <io8535v.h>
(0007) #include <macros.h>
(0008) #define uchar unsigned char
(0009) #define uint unsigned int
(0010) 
(0011) //**********定义全局变量*******************//
(0012) //查表0    1    2    3    4    5   6    7    8    9    E    F   P   OFF
(0013) uchar table[14]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79,0x71,0x73,0x00};
(0014) uchar ICcode[4];//定义IC卡复位时读出的4字节代码;
(0015) uchar ICcontent[14];//定义IC卡有效信息;
(0016) uchar Money[5];//定义IC卡内金额;
(0017) uchar EEEEE[5]={0x79,0x79,0x79,0x79};
(0018) uchar FFFFF[5]={0x71,0x71,0x71,0x71};
(0019) uchar IC_Flag;//定义IC卡上电标志;
(0020) uchar Num_Flag;//数标志;
(0021) uchar Add_Flag;//加标志
(0022) uchar Sub_Flag;//减标志
(0023) uchar Init_Flag;//初始化标志
(0024) uchar Repair_Flag;//修卡标志;
(0025) uchar Enter_Flag;//确认标志
(0026) uchar Point_Flag;//.标志
(0027) uchar Key_Flag; //按键标志;
(0028) 
(0029)      
(0030) //***********IC卡引脚信号处理***************//
(0031) void Voice(uchar PD) //Voice=PD^7
(0032) {if(PD==1) PORTD|=0x80;//Voice置1
_Voice:
  PD                   --> R16
    0040 3001      CPI	R16,1
    0041 F411      BNE	0x0044
    0042 9A97      SBI	0x12,7
    0043 C003      RJMP	0x0047
(0033)  else      PORTD&=~80; //Voice置0
    0044 B382      IN	R24,0x12
    0045 7A8F      ANDI	R24,0xAF
    0046 BB82      OUT	0x12,R24
(0034) }
    0047 9508      RET
(0035) 
(0036) void RST(uchar PD)  //RST=PD^6
(0037) {if(PD==1) PORTD|=0x40;//RST置1
_RST:
  PD                   --> R16
    0048 3001      CPI	R16,1
    0049 F411      BNE	0x004C
    004A 9A96      SBI	0x12,6
    004B C001      RJMP	0x004D
(0038)  else       PORTD&=~0x40;//RST置0
    004C 9896      CBI	0x12,6
(0039) }
    004D 9508      RET
(0040) 
(0041) void CLK(uchar PD) //CLK=PD^5
(0042) {if(PD==1) PORTD|=0x20;//CLK置1
_CLK:
  PD                   --> R16
    004E 3001      CPI	R16,1
    004F F411      BNE	0x0052
    0050 9A95      SBI	0x12,5
    0051 C001      RJMP	0x0053
(0043)  else       PORTD&=~0x20;//CLK置0
    0052 9895      CBI	0x12,5
(0044) }
    0053 9508      RET
(0045) 
(0046) void IO(uchar PD)  //IO=PD^4
(0047) {if(PD==1) PORTD|=0x10;//IO置1
_IO:
  PD                   --> R16
    0054 3001      CPI	R16,1
    0055 F411      BNE	0x0058
    0056 9A94      SBI	0x12,4
    0057 C001      RJMP	0x0059
(0048)  else       PORTD&=~0x10;//IO置0
    0058 9894      CBI	0x12,4
(0049) }
    0059 9508      RET
(0050)  
(0051) void SetIO(uchar i)//设置IO口属性
(0052) {if(i==1) DDRD=0xf0; //IO口输出:1111 0000
_SetIO:
  i                    --> R16
    005A 3001      CPI	R16,1
    005B F419      BNE	0x005F
    005C EF80      LDI	R24,0xF0
    005D BB81      OUT	0x11,R24
    005E C002      RJMP	0x0061
(0053)  else     DDRD=0xe0; //IO口输如:1110 0000
    005F EE80      LDI	R24,0xE0
    0060 BB81      OUT	0x11,R24
(0054)  PORTD=0x00;//不带上拉电阻;
    0061 2422      CLR	R2
    0062 BA22      OUT	0x12,R2
(0055) }
    0063 9508      RET
(0056) 
(0057) //**********延时函数(Us数量级)*********//
(0058) //单周期指令执行时间,执行时间1/8us*分频系数(取8分频则刚好1us);
(0059) void DelayUs(uchar i)
(0060) {for(;i!=0;i--)  
_DelayUs:
  i                    --> R16
    0064 C002      RJMP	0x0067
(0061)  NOP();
    0065 0000      NOP
    0066 950A      DEC	R16
    0067 2300      TST	R16
    0068 F7E1      BNE	0x0065
(0062) }
    0069 9508      RET
_DelayMs:
  k                    --> R20
  j                    --> R22
  i                    --> R16
    006A D5AB      RCALL	push_gset2
(0063) 
(0064) //****************延时函数(Ms数量级)*********//
(0065) void DelayMs(uint i)
(0066) {uchar j,k;
(0067)  for(;i!=0;i--)
    006B C00D      RJMP	0x0079
(0068)     {for(k=0;k<4;k++)
    006C 2744      CLR	R20
    006D C007      RJMP	0x0075
(0069)       {for(j=250;j!=0;j--) NOP();}
    006E EF6A      LDI	R22,0xFA
    006F C002      RJMP	0x0072
    0070 0000      NOP
    0071 956A      DEC	R22
    0072 2366      TST	R22
    0073 F7E1      BNE	0x0070
    0074 9543      INC	R20
    0075 3044      CPI	R20,4
    0076 F3B8      BCS	0x006E
    0077 5001      SUBI	R16,1
    0078 4010      SBCI	R17,0
    0079 3000      CPI	R16,0
    007A 0701      CPC	R16,R17
    007B F781      BNE	0x006C
(0070) 	}
(0071) }
    007C D57C      RCALL	pop_gset2
    007D 9508      RET
_ReceiveData:
  io_value             --> R20
  count                --> R22
  value                --> R10
    007E D59A      RCALL	push_gset3
(0072) 
(0073) //****************接收数据**************//
(0074) uchar ReceiveData(void)
(0075) {uchar count;
(0076)  uchar value;
(0077)  uchar io_value;
(0078)  value=0;
    007F 24AA      CLR	R10
(0079)  SetIO(0);//设置IO脚为输入;
    0080 2700      CLR	R16
    0081 DFD8      RCALL	_SetIO
(0080)  CLK(0);
    0082 2700      CLR	R16
    0083 DFCA      RCALL	_CLK
(0081)  //IO=1;
(0082)  for(count=0;count<8;count++)
    0084 2766      CLR	R22
    0085 C014      RJMP	0x009A
(0083)   {value=value>>1; 
    0086 94A6      LSR	R10
(0084)    CLK(1);
    0087 E001      LDI	R16,1
    0088 DFC5      RCALL	_CLK
(0085)    DelayUs(2);
    0089 E002      LDI	R16,2
    008A DFD9      RCALL	_DelayUs
(0086)    io_value=PIND;
    008B B340      IN	R20,0x10
(0087)    CLK(0);
    008C 2700      CLR	R16
    008D DFC0      RCALL	_CLK
(0088)    DelayUs(2);
    008E E002      LDI	R16,2
    008F DFD4      RCALL	_DelayUs
(0089)    if(io_value&0x10==0x10) value|=0x80;//判断IO脚是否为1
    0090 FF40      SBRS	R20,0
    0091 C004      RJMP	0x0096
    0092 2D8A      MOV	R24,R10
    0093 6880      ORI	R24,0x80
    0094 2EA8      MOV	R10,R24
    0095 C003      RJMP	0x0099
(0090)    else value&=0x7f;
    0096 2D8A      MOV	R24,R10
    0097 778F      ANDI	R24,0x7F
    0098 2EA8      MOV	R10,R24
    0099 9563      INC	R22
    009A 3068      CPI	R22,0x8
    009B F350      BCS	0x0086
(0091)   }
(0092)  return (value);
    009C 2D0A      MOV	R16,R10
    009D D55D      RCALL	pop_gset3
    009E 9508      RET
_SendData:
  value                --> R20
  count                --> R20
  Xdata                --> R22
    009F D576      RCALL	push_gset2
    00A0 2F60      MOV	R22,R16
(0093) }
(0094) 
(0095) //********************发送数据************//
(0096) void SendData(uchar Xdata)  
(0097) {uchar count;
(0098)  uchar value;
(0099)  SetIO(1);////设置IO脚为输出;
    00A1 E001      LDI	R16,1
    00A2 DFB7      RCALL	_SetIO
(0100)  value=Xdata;
(0101)  for(count=8;count!=0;count--)
    00A3 E048      LDI	R20,0x8
    00A4 C015      RJMP	0x00BA
(0102)  	{CLK(0);
    00A5 2700      CLR	R16
    00A6 DFA7      RCALL	_CLK
(0103) 	 if((Xdata<<(count-1))&0x80) IO(1);
    00A7 2F14      MOV	R17,R20
    00A8 5011      SUBI	R17,1
    00A9 2F06      MOV	R16,R22
    00AA D5A2      RCALL	lsl8
    00AB 2F80      MOV	R24,R16
    00AC 7880      ANDI	R24,0x80
    00AD F019      BEQ	0x00B1
    00AE E001      LDI	R16,1
    00AF DFA4      RCALL	_IO
    00B0 C002      RJMP	0x00B3
(0104) 	 else IO(0);
    00B1 2700      CLR	R16
    00B2 DFA1      RCALL	_IO
(0105) 	 CLK(1);
    00B3 E001      LDI	R16,1
    00B4 DF99      RCALL	_CLK
(0106) 	 DelayUs(2);
    00B5 E002      LDI	R16,2
    00B6 DFAD      RCALL	_DelayUs
(0107) 	 CLK(0);}
    00B7 2700      CLR	R16
    00B8 DF95      RCALL	_CLK
    00B9 954A      DEC	R20
    00BA 2344      TST	R20
    00BB F749      BNE	0x00A5
(0108) }
    00BC D53C      RCALL	pop_gset2
    00BD 9508      RET
_ResetIC:
  count                --> R20
  Xdata                --> R22
    00BE D557      RCALL	push_gset2
    00BF 2F60      MOV	R22,R16
    00C0 2F71      MOV	R23,R17
(0109) 
(0110) //****************IC卡复位************************//
(0111) void ResetIC(uchar *Xdata)
(0112) {uchar count;
(0113)  SetIO(1); //设置IC卡引脚的属性
    00C1 E001      LDI	R16,1
    00C2 DF97      RCALL	_SetIO
(0114)  RST(0);
    00C3 2700      CLR	R16
    00C4 DF83      RCALL	_RST
(0115)  CLK(0);
    00C5 2700      CLR	R16
    00C6 DF87      RCALL	_CLK
(0116)  IO(1);
    00C7 E001      LDI	R16,1
    00C8 DF8B      RCALL	_IO
(0117)  DelayUs(5);
    00C9 E005      LDI	R16,5
    00CA DF99      RCALL	_DelayUs
(0118)  RST(1);
    00CB E001      LDI	R16,1
    00CC DF7B      RCALL	_RST
(0119)  DelayUs(5);
    00CD E005      LDI	R16,5
    00CE DF95      RCALL	_DelayUs
(0120)  CLK(1);
    00CF E001      LDI	R16,1
    00D0 DF7D      RCALL	_CLK
(0121)  DelayUs(5);
    00D1 E005      LDI	R16,5
    00D2 DF91      RCALL	_DelayUs
(0122)  CLK(0);
    00D3 2700      CLR	R16
    00D4 DF79      RCALL	_CLK
(0123)  DelayUs(5);
    00D5 E005      LDI	R16,5
    00D6 DF8D      RCALL	_DelayUs
(0124)  RST(0);
    00D7 2700      CLR	R16
    00D8 DF6F      RCALL	_RST
(0125)  for(count=4;count!=0;count--)
    00D9 E044      LDI	R20,4
    00DA C007      RJMP	0x00E2
(0126)  	{*Xdata=ReceiveData();
    00DB DFA2      RCALL	_ReceiveData
    00DC 2FE6      MOV	R30,R22
    00DD 2FF7      MOV	R31,R23
    00DE 8300      STD	Z+0,R16
(0127) 	 Xdata+=2;}
    00DF 5F6E      SUBI	R22,0xFE
    00E0 4F7F      SBCI	R23,0xFF
    00E1 954A      DEC	R20
    00E2 2344      TST	R20
    00E3 F7B9      BNE	0x00DB
(0128) } 
    00E4 D514      RCALL	pop_gset2
    00E5 9508      RET
(0129) 
(0130) //*******************Start条件****************//
(0131) void Start(void)
(0132) {SetIO(1);
_Start:
    00E6 E001      LDI	R16,1
    00E7 DF72      RCALL	_SetIO
(0133)  CLK(0);
    00E8 2700      CLR	R16
    00E9 DF64      RCALL	_CLK
(0134)  IO(0);
    00EA 2700      CLR	R16
    00EB DF68      RCALL	_IO
(0135)  DelayUs(2);
    00EC E002      LDI	R16,2
    00ED DF76      RCALL	_DelayUs
(0136)  CLK(1);
    00EE E001      LDI	R16,1
    00EF DF5E      RCALL	_CLK
(0137)  IO(1);
    00F0 E001      LDI	R16,1
    00F1 DF62      RCALL	_IO
(0138)  DelayUs(2);
    00F2 E002      LDI	R16,2
    00F3 DF70      RCALL	_DelayUs
(0139)  IO(0);
    00F4 2700      CLR	R16
    00F5 DF5E      RCALL	_IO
(0140)  CLK(0);
    00F6 2700      CLR	R16
(0141) }
    00F7 CF56      RJMP	_CLK
(0142) 
(0143) //*******************Stop条件****************//
(0144) void Stop(void)
(0145) {CLK(0);
_Stop:
    00F8 2700      CLR	R16
    00F9 DF54      RCALL	_CLK
(0146)  IO(0);
    00FA 2700      CLR	R16
    00FB DF58      RCALL	_IO
(0147)  DelayUs(2);
    00FC E002      LDI	R16,2
    00FD DF66      RCALL	_DelayUs
(0148)  CLK(1);
    00FE E001      LDI	R16,1
    00FF DF4E      RCALL	_CLK
(0149)  IO(0);
    0100 2700      CLR	R16
    0101 DF52      RCALL	_IO

⌨️ 快捷键说明

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