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

📄 work.lst

📁 AVRkaifashili.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0000 CFFF      RJMP	__text_start
    0001 C2FB      RJMP	_INTHandler
    0002 BFCD      OUT	0x3D,R28
    0003 BFDE      OUT	0x3E,R29
    0004 51C0      SUBI	R28,0x10
    0005 40D0      SBCI	R29,0
    0006 EA0A      LDI	R16,0xAA
    0007 8308      STD	Y+0,R16
    0008 2400      CLR	R0
    0009 E6E0      LDI	R30,0x60
    000A E0F0      LDI	R31,0
    000B E010      LDI	R17,0
    000C 36E8      CPI	R30,0x68
    000D 07F1      CPC	R31,R17
    000E F011      BEQ	0x0011
    000F 9201      ST	R0,Z+
    0010 CFFB      RJMP	0x000C
    0011 8300      STD	Z+0,R16
    0012 E0E0      LDI	R30,0
    0013 E0F0      LDI	R31,0
    0014 E6A0      LDI	R26,0x60
    0015 E0B0      LDI	R27,0
    0016 E010      LDI	R17,0
    0017 30E0      CPI	R30,0
    0018 07F1      CPC	R31,R17
    0019 F021      BEQ	0x001E
    001A 95C8      LPM
    001B 9631      ADIW	R30,1
    001C 920D      ST	R0,X+
    001D CFF9      RJMP	0x0017
    001E D28B      RCALL	_main
_exit:
    001F CFFF      RJMP	_exit
FILE: E:\张军\AVR\光盘内容\实例源文件\第七章工程\wwork.c
(0001) //**********************FileName:Work.c**************************//
(0002) //**********************ICCAVR6.30编译****************************//
(0003) #include <io8535v.h>
(0004) #include <macros.h>
(0005) #define uchar unsigned char
(0006) #define uint  unsigned int
(0007) 
(0008) //引脚信号定义
(0009) #define  KEY_0 (PINA&0x01)     //PA0装票键 
(0010) #define  KEY_1 (PINA&0x02)     //PA1打印页码键
(0011) #define  KEY_2 (PINA&0x04)     //PA2盖章键 
(0012) 
(0013) #define  SONSOR_0 (PINB&0x01)  //PB0前传感器
(0014) #define  SONSOR_1 (PINB&0x02)  //PB1中传感器
(0015) #define  SONSOR_2 (PINB&0x04)  //PB2后传感器
(0016) #define  SONSOR_3 (PINB&0x08)  //PB3纸传感器
(0017) #define  SONSOR_4 (PINB&0x10)  //PB4字轮传感器
(0018) #define  SONSOR_5 (PINB&0x20)  //PB5行走左传感器
(0019) #define  SONSOR_6 (PINB&0x40)  //PB6行走右传感器
(0020) 
(0021) #define  SIGN_ON1   (PORTD=PORTD|0x01) //PD0=1盖章工作指示灯输出
(0022) #define  SIGN_ON0   (PORTD=PORTD&0xfe) //PD0=0盖章工作指示灯输出
(0023) #define  SIGN_OFF1  (PORTD=PORTD|0x02) //PD1=1盖章结束指示灯输出管脚
(0024) #define  SIGN_OFF0  (PORTD=PORTD&0xfd) //PD1=0盖章结束指示灯输出管脚
(0025) #define  PRINT_ON1  (PORTD=PORTD|0x08) //PD3=1打印页码工作指示灯输出管脚
(0026) #define  PRINT_ON0  (PORTD=PORTD&0xf7) //PD3=0打印页码工作指示灯输出管脚
(0027) #define  PRINT_OFF1 (PORTD=PORTD|0x10) //PD4=1打印页码结束指示灯输出管脚
(0028) #define  PRINT_OFF0 (PORTD=PORTD&0xef) //PD4=1打印页码结束指示灯输出管脚
(0029) 
(0030) #define  GRASP_ACT1 (PORTC=PORTC|0x01) //PC0抓纸机械手输出管脚
(0031) #define  GRASP_ACT0 (PORTC=PORTC&0xfe) //PC0抓纸机械手输出管脚
(0032) #define  PRINT_ACT1 (PORTC=PORTC|0x02) //PC1字轮击打电磁铁输出管脚
(0033) #define  PRINT_ACT0 (PORTC=PORTC&0xfd) //PC1字轮击打电磁铁输出管脚
(0034) #define  SIGN_ACT1  (PORTC=PORTC|0x04) //PC2盖章击打电磁铁输出管脚
(0035) #define  SIGN_ACT0  (PORTC=PORTC&0xfb) //PC2盖章击打电磁铁输出管脚
(0036) #define  M_DIR1     (PORTC=PORTC|0x08) //PC3电机方向输出管脚
(0037) #define  M_DIR0     (PORTC=PORTC&0xf7) //PC3电机方向输出管脚
(0038) #define  M3_pulse1  (PORTC=PORTC|0x10) //PC4字轮电机脉冲输出管脚
(0039) #define  M3_pulse0  (PORTC=PORTC&0xef) //PC4字轮电机脉冲输出管脚
(0040) #define  M2_pulse1  (PORTC=PORTC|0x20) //PC5行走电机脉冲输出管脚
(0041) #define  M2_pulse0  (PORTC=PORTC&0xdf) //PC5行走电机脉冲输出管脚
(0042) #define  M1_pulse1  (PORTC=PORTC|0x40) //PC6装票电机脉冲输出管脚
(0043) #define  M1_pulse0  (PORTC=PORTC&0xbf) //PC6装票电机脉冲输出管脚
(0044) 
(0045) uchar KeyDown;  //有功能键按下标志
(0046) uchar Cancell;  //取消功能键标志
(0047) uint  u;        //翻页步进电机的步数变量
(0048) uint  b;        //页码序号的不同位数之间差值的中间变量    
(0049) uchar FunkeyNum;//功能按键的标号变量
(0050) uchar R_Step;   //页码序号之间的距离(数字间距)所需的步进电机的步数
(0051) 
(0052) //*****************I/O口初始化*****************************
(0053) void IO_Init(void)
(0054) {DDRA=0x00;//A口三态输入
_IO_Init:
    0020 2422      CLR	R2
    0021 BA2A      OUT	0x1A,R2
(0055)  PORTA=0x00;
    0022 BA2B      OUT	0x1B,R2
(0056)  DDRB=0x00;//B口三态输入
    0023 BA27      OUT	0x17,R2
(0057)  PORTB=0x00;
    0024 BA28      OUT	0x18,R2
(0058)  DDRC=0xff;//C口推挽输出
    0025 EF8F      LDI	R24,0xFF
    0026 BB84      OUT	0x14,R24
(0059)  PORTC=0xff;
    0027 BB85      OUT	0x15,R24
(0060)  DDRD=0xfb;//D口推挽输出,PD2中断输入
    0028 EF8B      LDI	R24,0xFB
    0029 BB81      OUT	0x11,R24
(0061)  PORTD=0xfb;
    002A BB82      OUT	0x12,R24
(0062) }
    002B 9508      RET
(0063) //*************************中断初始化函数************************//
(0064) void INT_Init(void)
(0065) {MCUCR=MCUCR&0xfd;//低电平中断
_INT_Init:
    002C B785      IN	R24,0x35
    002D 7F8D      ANDI	R24,0xFD
    002E BF85      OUT	0x35,R24
(0066)  GIMSK=GIMSK|0x40;//INT0中断使能
    002F B78B      IN	R24,0x3B
    0030 6480      ORI	R24,0x40
    0031 BF8B      OUT	0x3B,R24
(0067)  SREG=SREG|0x80;//全局中断使能
    0032 9478      BSET	7
(0068) }
    0033 9508      RET
_DelayShort:
  i                    --> R20
  j                    --> R16
    0034 D326      RCALL	push_gset1
(0069) 
(0070) //***************************短延时函数************************//
(0071) void DelayShort(uint j)                        
(0072) {uint i;
(0073)  for(i=0;i<j;i++) ;  
    0035 2744      CLR	R20
    0036 2755      CLR	R21
    0037 C002      RJMP	0x003A
    0038 5F4F      SUBI	R20,0xFF
    0039 4F5F      SBCI	R21,0xFF
    003A 1740      CP	R20,R16
    003B 0751      CPC	R21,R17
    003C F3D8      BCS	0x0038
(0074) }
    003D D320      RCALL	pop_gset1
    003E 9508      RET
_DelayLong:
  l                    --> R22
  i                    --> R20
  j                    --> R16
    003F D332      RCALL	push_gset2
(0075) 
(0076) //***************************长延时函数************************//
(0077) void DelayLong(uint j)                
(0078) {uint i;
(0079)  for(i=0;i<j;i++)
    0040 2744      CLR	R20
    0041 2755      CLR	R21
    0042 C00B      RJMP	0x004E
(0080)    {uint l;
(0081)     for(l=0;l<1000;l++);}    
    0043 2766      CLR	R22
    0044 2777      CLR	R23
    0045 C002      RJMP	0x0048
    0046 5F6F      SUBI	R22,0xFF
    0047 4F7F      SBCI	R23,0xFF
    0048 3E68      CPI	R22,0xE8
    0049 E0E3      LDI	R30,3
    004A 077E      CPC	R23,R30
    004B F3D0      BCS	0x0046
    004C 5F4F      SUBI	R20,0xFF
    004D 4F5F      SBCI	R21,0xFF
    004E 1740      CP	R20,R16
    004F 0751      CPC	R21,R17
    0050 F390      BCS	0x0043
(0082) }
    0051 D307      RCALL	pop_gset2
    0052 9508      RET
(0083) //*************************按键扫描函数************************//
(0084) void FunkeyScan()
(0085) {KeyDown=0;
_FunkeyScan:
    0053 2422      CLR	R2
    0054 92200067  STS	_KeyDown,R2
(0086)  FunkeyNum=3;
    0056 E083      LDI	R24,3
    0057 93800061  STS	_FunkeyNum,R24
(0087)  if(KEY_0==0)
    0059 99C8      SBIC	0x19,0
    005A C00B      RJMP	0x0066
(0088)   {DelayLong(10);       //去抖动延时10ms
    005B E00A      LDI	R16,0xA
    005C E010      LDI	R17,0
    005D DFE1      RCALL	_DelayLong
(0089)    if(KEY_0==0)
    005E 99C8      SBIC	0x19,0
    005F C006      RJMP	0x0066
(0090)     {FunkeyNum=0;       //按键的标号变量值赋0
    0060 2422      CLR	R2
    0061 92200061  STS	_FunkeyNum,R2
(0091)      KeyDown=1;}}       //PA0  装票功能键按下
    0063 E081      LDI	R24,1
    0064 93800067  STS	_KeyDown,R24
(0092)  if(KEY_1==0)
    0066 99C9      SBIC	0x19,1
    0067 C00A      RJMP	0x0072
(0093)   {DelayLong(10);       //去抖动延时10ms
    0068 E00A      LDI	R16,0xA
    0069 E010      LDI	R17,0
    006A DFD4      RCALL	_DelayLong
(0094)    if(KEY_1==0)
    006B 99C9      SBIC	0x19,1
    006C C005      RJMP	0x0072
(0095)     {FunkeyNum=1;       //按键的标号变量值赋1
    006D E081      LDI	R24,1
    006E 93800061  STS	_FunkeyNum,R24
(0096)      KeyDown=1;}}       //PA1  盖章功能键按下
    0070 93800067  STS	_KeyDown,R24
(0097)  if(KEY_2==0)
    0072 99CA      SBIC	0x19,2
    0073 C00B      RJMP	0x007F
(0098)   {DelayLong(10);       //去抖动延时10ms
    0074 E00A      LDI	R16,0xA
    0075 E010      LDI	R17,0
    0076 DFC8      RCALL	_DelayLong
(0099)    if(KEY_2==0)
    0077 99CA      SBIC	0x19,2
    0078 C006      RJMP	0x007F
(0100)     {FunkeyNum=2;       //按键的标号变量值赋2
    0079 E082      LDI	R24,2
    007A 93800061  STS	_FunkeyNum,R24
(0101)      KeyDown=1;}}       //PA2 打码功能键按下
    007C E081      LDI	R24,1
    007D 93800067  STS	_KeyDown,R24
(0102) }
    007F 9508      RET
(0103) //******************装票步进电机频率函数***********************//
(0104) void PulseZhuangPiao()     
(0105) {
(0106)    DelayShort(45);      //装票步进电机周期45us
_PulseZhuangPiao:
    0080 E20D      LDI	R16,0x2D
    0081 E010      LDI	R17,0
    0082 DFB1      RCALL	_DelayShort
(0107)    M1_pulse1;           //Pc7=1
    0083 9AAE      SBI	0x15,6
(0108)    DelayShort(45);      //装票步进电机周期45us
    0084 E20D      LDI	R16,0x2D
    0085 E010      LDI	R17,0
    0086 DFAD      RCALL	_DelayShort
(0109)    M1_pulse0;           //Pc7=0
    0087 B385      IN	R24,0x15
    0088 7B8F      ANDI	R24,0xBF
    0089 BB85      OUT	0x15,R24
(0110) }
    008A 9508      RET
(0111) //******************翻页步进电机频率函数***********************//
(0112) void PulseXingZou()
(0113) {
(0114)    DelayShort(35);      //翻页步进电机周期35us
_PulseXingZou:
    008B E203      LDI	R16,0x23
    008C E010      LDI	R17,0
    008D DFA6      RCALL	_DelayShort
(0115)    M2_pulse1;           //Pc6=1
    008E 9AAD      SBI	0x15,5
(0116)    DelayShort(35);      //翻页步进电机周期35us
    008F E203      LDI	R16,0x23
    0090 E010      LDI	R17,0
    0091 DFA2      RCALL	_DelayShort
(0117)    M2_pulse0;           //Pc6=0
    0092 B385      IN	R24,0x15
    0093 7D8F      ANDI	R24,0xDF
    0094 BB85      OUT	0x15,R24
(0118) }
    0095 9508      RET
(0119) //******************字轮步进电机频率函数***********************//
(0120) void PulseZiLun()        
(0121) {
(0122)    DelayShort(55);      //字轮电机周期55us
_PulseZiLun:
    0096 E307      LDI	R16,0x37
    0097 E010      LDI	R17,0
    0098 DF9B      RCALL	_DelayShort
(0123)    M3_pulse0;           //Pc5=0
    0099 B385      IN	R24,0x15
    009A 7E8F      ANDI	R24,0xEF
    009B BB85      OUT	0x15,R24
(0124)    DelayShort(55);      //字轮电机周期55us
    009C E307      LDI	R16,0x37
    009D E010      LDI	R17,0
    009E DF95      RCALL	_DelayShort
(0125)    M3_pulse1;           //Pc5=1
    009F 9AAC      SBI	0x15,4
(0126) }
    00A0 9508      RET
(0127) //***************打印数码的电磁击打锤动作函数******************//
(0128) void Print_Act()
(0129) {
(0130)    PRINT_ACT1;           //打字电磁铁打下      
_Print_Act:
    00A1 9AA9      SBI	0x15,1
(0131)    DelayLong(5);         //打字电磁铁打下时间延时20(*1000)us
    00A2 E005      LDI	R16,5
    00A3 E010      LDI	R17,0
    00A4 DF9A      RCALL	_DelayLong
(0132)    PRINT_ACT0;           //打字电磁铁上升     
    00A5 B385      IN	R24,0x15
    00A6 7F8D      ANDI	R24,0xFD
    00A7 BB85      OUT	0x15,R24
(0133)    DelayLong(20);        //打字电磁铁上升时间延时20(*1000)us
    00A8 E104      LDI	R16,0x14
    00A9 E010      LDI	R17,0
(0134) }
    00AA CF94      RJMP	_DelayLong
(0135) //***************盖章的电磁击打锤动作函数**********************//
(0136) void Sign_Act()
(0137) {
(0138)    SIGN_ACT1;            //盖章电磁铁打下     
_Sign_Act:
    00AB 9AAA      SBI	0x15,2
(0139)    DelayLong(20);        //盖章电磁铁打下时间延时20(*1000)us
    00AC E104      LDI	R16,0x14
    00AD E010      LDI	R17,0
    00AE DF90      RCALL	_DelayLong
(0140)    SIGN_ACT0;            //盖章电磁铁打下   
    00AF B385      IN	R24,0x15
    00B0 7F8B      ANDI	R24,0xFB
    00B1 BB85      OUT	0x15,R24
(0141)    DelayLong(20);        //盖章电磁铁上升时间延时20(*1000)us
    00B2 E104      LDI	R16,0x14
    00B3 E010      LDI	R17,0
(0142) }
    00B4 CF8A      RJMP	_DelayLong
(0143) //***************翻页电机行走字间距函数************************//
(0144) void  Num_Step()
(0145) {
(0146)    M_DIR0;                //翻页电机反转
_Num_Step:
    00B5 B385      IN	R24,0x15
    00B6 7F87      ANDI	R24,0xF7
    00B7 BB85      OUT	0x15,R24
(0147)    for(u=0;u<40;u++)      //翻页电机行走的字间距即步进电机的40步
    00B8 2422      CLR	R2
    00B9 2433      CLR	R3
    00BA 92300065  STS	_u+1,R3
    00BC 92200064  STS	_u,R2
    00BE C00A      RJMP	0x00C9
(0148)     PulseXingZou();       
    00BF DFCB      RCALL	_PulseXingZou
    00C0 91800064  LDS	R24,_u
    00C2 91900065  LDS	R25,_u+1
    00C4 9601      ADIW	R24,1
    00C5 93900065  STS	_u+1,R25
    00C7 93800064  STS	_u,R24
    00C9 91800064  LDS	R24,_u
    00CB 91900065  LDS	R25,_u+1
    00CD 3288      CPI	R24,0x28
    00CE E0E0      LDI	R30,0
    00CF 079E      CPC	R25,R30
    00D0 F370      BCS	0x00BF
(0149) }
    00D1 9508      RET
_Reverse_Step:
  i                    --> R20
    00D2 D288      RCALL	push_gset1
(0150) //***************翻页电机行走抓纸张函数************************//
(0151) void Reverse_Step()
(0152) {
(0153)   unsigned int i;
(0154)   for(i=0;i<350;i++)      //居中以后再走100吸纸
    00D3 2744      CLR	R20
    00D4 2755      CLR	R21
    00D5 C006      RJMP	0x00DC
(0155)    { 
(0156)     M_DIR0;               //翻页电机反转
    00D6 B385      IN	R24,0x15
    00D7 7F87      ANDI	R24,0xF7
    00D8 BB85      OUT	0x15,R24
(0157)     PulseXingZou();       //翻页电机驱动脉冲输出
    00D9 DFB1      RCALL	_PulseXingZou
    00DA 5F4F      SUBI	R20,0xFF
    00DB 4F5F      SBCI	R21,0xFF
    00DC 354E      CPI	R20,0x5E
    00DD E0E1      LDI	R30,1
    00DE 075E      CPC	R21,R30
    00DF F3B0      BCS	0x00D6
(0158)    }
(0159)     GRASP_ACT1;           //机械手抓纸
    00E0 9AA8      SBI	0x15,0
    00E1 C004      RJMP	0x00E6
(0160)    while(SONSOR_5==0)     //检测传感器5
(0161)    { 
(0162)     M_DIR0;               //翻页电机反转
    00E2 B385      IN	R24,0x15
    00E3 7F87      ANDI	R24,0xF7
    00E4 BB85      OUT	0x15,R24
(0163)     PulseXingZou();       //翻页电机驱动脉冲输出
    00E5 DFA5      RCALL	_PulseXingZou
    00E6 9BB5      SBIS	0x16,5
    00E7 CFFA      RJMP	0x00E2
(0164)    }
(0165) }
    00E8 D275      RCALL	pop_gset1
    00E9 9508      RET
(0166) //***************翻页电机行走上电后复位函数********************//
(0167) void Forward_Step()
(0168) {
_Forward_Step:
    00EA C002      RJMP	0x00ED
(0169)    while(SONSOR_6==0)     //检测传感器6
(0170)    { 
(0171)     M_DIR1;               //翻页电机正转
    00EB 9AAB      SBI	0x15,3
(0172)     PulseXingZou();       //翻页电机驱动脉冲输出
    00EC DF9E      RCALL	_PulseXingZou
    00ED 9BB6      SBIS	0x16,6
    00EE CFFC      RJMP	0x00EB
(0173)    }

⌨️ 快捷键说明

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