📄 work.lis
字号:
.module work.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\第七章\第七章工程\work.c
0000 .dbfunc e IO_Init _IO_Init fV
.even
0000 _IO_Init::
0000 .dbline -1
0000 .dbline 54
0000 ; //**********************FileName:Work.c**************************//
0000 ; //**********************ICCAVR6.30编译****************************//
0000 ; #include <io8535v.h>
0000 ; #include <macros.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ;
0000 ; //引脚信号定义
0000 ; #define KEY_0 (PINA&0x01) //PA0装票键
0000 ; #define KEY_1 (PINA&0x02) //PA1打印页码键
0000 ; #define KEY_2 (PINA&0x04) //PA2盖章键
0000 ;
0000 ; #define SONSOR_0 (PINB&0x01) //PB0前传感器
0000 ; #define SONSOR_1 (PINB&0x02) //PB1中传感器
0000 ; #define SONSOR_2 (PINB&0x04) //PB2后传感器
0000 ; #define SONSOR_3 (PINB&0x08) //PB3纸传感器
0000 ; #define SONSOR_4 (PINB&0x10) //PB4字轮传感器
0000 ; #define SONSOR_5 (PINB&0x20) //PB5行走左传感器
0000 ; #define SONSOR_6 (PINB&0x40) //PB6行走右传感器
0000 ;
0000 ; #define SIGN_ON1 (PORTD=PORTD|0x01) //PD0=1盖章工作指示灯输出
0000 ; #define SIGN_ON0 (PORTD=PORTD&0xfe) //PD0=0盖章工作指示灯输出
0000 ; #define SIGN_OFF1 (PORTD=PORTD|0x02) //PD1=1盖章结束指示灯输出管脚
0000 ; #define SIGN_OFF0 (PORTD=PORTD&0xfd) //PD1=0盖章结束指示灯输出管脚
0000 ; #define PRINT_ON1 (PORTD=PORTD|0x08) //PD3=1打印页码工作指示灯输出管脚
0000 ; #define PRINT_ON0 (PORTD=PORTD&0xf7) //PD3=0打印页码工作指示灯输出管脚
0000 ; #define PRINT_OFF1 (PORTD=PORTD|0x10) //PD4=1打印页码结束指示灯输出管脚
0000 ; #define PRINT_OFF0 (PORTD=PORTD&0xef) //PD4=1打印页码结束指示灯输出管脚
0000 ;
0000 ; #define GRASP_ACT1 (PORTC=PORTC|0x01) //PC0抓纸机械手输出管脚
0000 ; #define GRASP_ACT0 (PORTC=PORTC&0xfe) //PC0抓纸机械手输出管脚
0000 ; #define PRINT_ACT1 (PORTC=PORTC|0x02) //PC1字轮击打电磁铁输出管脚
0000 ; #define PRINT_ACT0 (PORTC=PORTC&0xfd) //PC1字轮击打电磁铁输出管脚
0000 ; #define SIGN_ACT1 (PORTC=PORTC|0x04) //PC2盖章击打电磁铁输出管脚
0000 ; #define SIGN_ACT0 (PORTC=PORTC&0xfb) //PC2盖章击打电磁铁输出管脚
0000 ; #define M_DIR1 (PORTC=PORTC|0x08) //PC3电机方向输出管脚
0000 ; #define M_DIR0 (PORTC=PORTC&0xf7) //PC3电机方向输出管脚
0000 ; #define M3_pulse1 (PORTC=PORTC|0x10) //PC4字轮电机脉冲输出管脚
0000 ; #define M3_pulse0 (PORTC=PORTC&0xef) //PC4字轮电机脉冲输出管脚
0000 ; #define M2_pulse1 (PORTC=PORTC|0x20) //PC5行走电机脉冲输出管脚
0000 ; #define M2_pulse0 (PORTC=PORTC&0xdf) //PC5行走电机脉冲输出管脚
0000 ; #define M1_pulse1 (PORTC=PORTC|0x40) //PC6装票电机脉冲输出管脚
0000 ; #define M1_pulse0 (PORTC=PORTC&0xbf) //PC6装票电机脉冲输出管脚
0000 ;
0000 ; uchar KeyDown; //有功能键按下标志
0000 ; uchar Cancell; //取消功能键标志
0000 ; uint u; //翻页步进电机的步数变量
0000 ; uint b; //页码序号的不同位数之间差值的中间变量
0000 ; uchar FunkeyNum;//功能按键的标号变量
0000 ; uchar R_Step; //页码序号之间的距离(数字间距)所需的步进电机的步数
0000 ;
0000 ; //*****************I/O口初始化*****************************
0000 ; void IO_Init(void)
0000 ; {DDRA=0x00;//A口三态输入
0000 .dbline 54
0000 2224 clr R2
0002 2ABA out 0x1a,R2
0004 .dbline 55
0004 ; PORTA=0x00;
0004 2BBA out 0x1b,R2
0006 .dbline 56
0006 ; DDRB=0x00;//B口三态输入
0006 27BA out 0x17,R2
0008 .dbline 57
0008 ; PORTB=0x00;
0008 28BA out 0x18,R2
000A .dbline 58
000A ; DDRC=0xff;//C口推挽输出
000A 8FEF ldi R24,255
000C 84BB out 0x14,R24
000E .dbline 59
000E ; PORTC=0xff;
000E 85BB out 0x15,R24
0010 .dbline 60
0010 ; DDRD=0xfb;//D口推挽输出,PD2中断输入
0010 8BEF ldi R24,251
0012 81BB out 0x11,R24
0014 .dbline 61
0014 ; PORTD=0xfb;
0014 82BB out 0x12,R24
0016 .dbline -2
0016 .dbline 62
0016 ; }
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e INT_Init _INT_Init fV
.even
0018 _INT_Init::
0018 .dbline -1
0018 .dbline 65
0018 ; //*************************中断初始化函数************************//
0018 ; void INT_Init(void)
0018 ; {MCUCR=MCUCR&0xfd;//低电平中断
0018 .dbline 65
0018 85B7 in R24,0x35
001A 8D7F andi R24,253
001C 85BF out 0x35,R24
001E .dbline 66
001E ; GIMSK=GIMSK|0x40;//INT0中断使能
001E 8BB7 in R24,0x3b
0020 8064 ori R24,64
0022 8BBF out 0x3b,R24
0024 .dbline 67
0024 ; SREG=SREG|0x80;//全局中断使能
0024 7894 bset 7
0026 .dbline -2
0026 .dbline 68
0026 ; }
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
0028 .dbfunc e DelayShort _DelayShort fV
0028 ; i -> R20,R21
0028 ; j -> R16,R17
.even
0028 _DelayShort::
0028 00D0 rcall push_gset1
002A .dbline -1
002A .dbline 72
002A ;
002A ; //***************************短延时函数************************//
002A ; void DelayShort(uint j)
002A ; {uint i;
002A .dbline 73
002A 4427 clr R20
002C 5527 clr R21
002E 02C0 rjmp L7
0030 L4:
0030 .dbline 73
0030 L5:
0030 .dbline 73
0030 4F5F subi R20,255 ; offset = 1
0032 5F4F sbci R21,255
0034 L7:
0034 .dbline 73
0034 ; for(i=0;i<j;i++) ;
0034 4017 cp R20,R16
0036 5107 cpc R21,R17
0038 D8F3 brlo L4
003A .dbline -2
003A .dbline 74
003A ; }
003A L3:
003A 00D0 rcall pop_gset1
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r i 20 i
003E .dbsym r j 16 i
003E .dbend
003E .dbfunc e DelayLong _DelayLong fV
003E ; l -> R22,R23
003E ; i -> R20,R21
003E ; j -> R16,R17
.even
003E _DelayLong::
003E 00D0 rcall push_gset2
0040 .dbline -1
0040 .dbline 78
0040 ;
0040 ; //***************************长延时函数************************//
0040 ; void DelayLong(uint j)
0040 ; {uint i;
0040 .dbline 79
0040 ; for(i=0;i<j;i++)
0040 4427 clr R20
0042 5527 clr R21
0044 0BC0 rjmp L12
0046 L9:
0046 .dbline 80
0046 ; {uint l;
0046 .dbline 81
0046 6627 clr R22
0048 7727 clr R23
004A 02C0 rjmp L16
004C L13:
004C .dbline 81
004C L14:
004C .dbline 81
004C 6F5F subi R22,255 ; offset = 1
004E 7F4F sbci R23,255
0050 L16:
0050 .dbline 81
0050 683E cpi R22,232
0052 E3E0 ldi R30,3
0054 7E07 cpc R23,R30
0056 D0F3 brlo L13
0058 .dbline 81
0058 L10:
0058 .dbline 79
0058 4F5F subi R20,255 ; offset = 1
005A 5F4F sbci R21,255
005C L12:
005C .dbline 79
005C 4017 cp R20,R16
005E 5107 cpc R21,R17
0060 90F3 brlo L9
0062 .dbline -2
0062 .dbline 82
0062 ; for(l=0;l<1000;l++);}
0062 ; }
0062 L8:
0062 00D0 rcall pop_gset2
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbsym r l 22 i
0066 .dbsym r i 20 i
0066 .dbsym r j 16 i
0066 .dbend
0066 .dbfunc e FunkeyScan _FunkeyScan fV
.even
0066 _FunkeyScan::
0066 .dbline -1
0066 .dbline 85
0066 ; //*************************按键扫描函数************************//
0066 ; void FunkeyScan()
0066 ; {KeyDown=0;
0066 .dbline 85
0066 2224 clr R2
0068 20920700 sts _KeyDown,R2
006C .dbline 86
006C ; FunkeyNum=3;
006C 83E0 ldi R24,3
006E 80930100 sts _FunkeyNum,R24
0072 .dbline 87
0072 ; if(KEY_0==0)
0072 C899 sbic 0x19,0
0074 0BC0 rjmp L18
0076 .dbline 88
0076 ; {DelayLong(10); //去抖动延时10ms
0076 .dbline 88
0076 0AE0 ldi R16,10
0078 10E0 ldi R17,0
007A E1DF rcall _DelayLong
007C .dbline 89
007C ; if(KEY_0==0)
007C C899 sbic 0x19,0
007E 06C0 rjmp L20
0080 .dbline 90
0080 ; {FunkeyNum=0; //按键的标号变量值赋0
0080 .dbline 90
0080 2224 clr R2
0082 20920100 sts _FunkeyNum,R2
0086 .dbline 91
0086 81E0 ldi R24,1
0088 80930700 sts _KeyDown,R24
008C .dbline 91
008C L20:
008C .dbline 91
008C ; KeyDown=1;}} //PA0 装票功能键按下
008C L18:
008C .dbline 92
008C ; if(KEY_1==0)
008C C999 sbic 0x19,1
008E 0AC0 rjmp L22
0090 .dbline 93
0090 ; {DelayLong(10); //去抖动延时10ms
0090 .dbline 93
0090 0AE0 ldi R16,10
0092 10E0 ldi R17,0
0094 D4DF rcall _DelayLong
0096 .dbline 94
0096 ; if(KEY_1==0)
0096 C999 sbic 0x19,1
0098 05C0 rjmp L24
009A .dbline 95
009A ; {FunkeyNum=1; //按键的标号变量值赋1
009A .dbline 95
009A 81E0 ldi R24,1
009C 80930100 sts _FunkeyNum,R24
00A0 .dbline 96
00A0 80930700 sts _KeyDown,R24
00A4 .dbline 96
00A4 L24:
00A4 .dbline 96
00A4 ; KeyDown=1;}} //PA1 盖章功能键按下
00A4 L22:
00A4 .dbline 97
00A4 ; if(KEY_2==0)
00A4 CA99 sbic 0x19,2
00A6 0BC0 rjmp L26
00A8 .dbline 98
00A8 ; {DelayLong(10); //去抖动延时10ms
00A8 .dbline 98
00A8 0AE0 ldi R16,10
00AA 10E0 ldi R17,0
00AC C8DF rcall _DelayLong
00AE .dbline 99
00AE ; if(KEY_2==0)
00AE CA99 sbic 0x19,2
00B0 06C0 rjmp L28
00B2 .dbline 100
00B2 ; {FunkeyNum=2; //按键的标号变量值赋2
00B2 .dbline 100
00B2 82E0 ldi R24,2
00B4 80930100 sts _FunkeyNum,R24
00B8 .dbline 101
00B8 81E0 ldi R24,1
00BA 80930700 sts _KeyDown,R24
00BE .dbline 101
00BE L28:
00BE .dbline 101
00BE L26:
00BE .dbline -2
00BE .dbline 102
00BE ; KeyDown=1;}} //PA2 打码功能键按下
00BE ; }
00BE L17:
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbend
00C0 .dbfunc e PulseZhuangPiao _PulseZhuangPiao fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -