?? work.lst
字號(hào):
__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\光盤內(nèi)容\實(shí)例源文件\第七章工程\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) //引腳信號(hào)定義
(0009) #define KEY_0 (PINA&0x01) //PA0裝票鍵
(0010) #define KEY_1 (PINA&0x02) //PA1打印頁(yè)碼鍵
(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蓋章結(jié)束指示燈輸出管腳
(0024) #define SIGN_OFF0 (PORTD=PORTD&0xfd) //PD1=0蓋章結(jié)束指示燈輸出管腳
(0025) #define PRINT_ON1 (PORTD=PORTD|0x08) //PD3=1打印頁(yè)碼工作指示燈輸出管腳
(0026) #define PRINT_ON0 (PORTD=PORTD&0xf7) //PD3=0打印頁(yè)碼工作指示燈輸出管腳
(0027) #define PRINT_OFF1 (PORTD=PORTD|0x10) //PD4=1打印頁(yè)碼結(jié)束指示燈輸出管腳
(0028) #define PRINT_OFF0 (PORTD=PORTD&0xef) //PD4=1打印頁(yè)碼結(jié)束指示燈輸出管腳
(0029)
(0030) #define GRASP_ACT1 (PORTC=PORTC|0x01) //PC0抓紙機(jī)械手輸出管腳
(0031) #define GRASP_ACT0 (PORTC=PORTC&0xfe) //PC0抓紙機(jī)械手輸出管腳
(0032) #define PRINT_ACT1 (PORTC=PORTC|0x02) //PC1字輪擊打電磁鐵輸出管腳
(0033) #define PRINT_ACT0 (PORTC=PORTC&0xfd) //PC1字輪擊打電磁鐵輸出管腳
(0034) #define SIGN_ACT1 (PORTC=PORTC|0x04) //PC2蓋章?lián)舸螂姶盆F輸出管腳
(0035) #define SIGN_ACT0 (PORTC=PORTC&0xfb) //PC2蓋章?lián)舸螂姶盆F輸出管腳
(0036) #define M_DIR1 (PORTC=PORTC|0x08) //PC3電機(jī)方向輸出管腳
(0037) #define M_DIR0 (PORTC=PORTC&0xf7) //PC3電機(jī)方向輸出管腳
(0038) #define M3_pulse1 (PORTC=PORTC|0x10) //PC4字輪電機(jī)脈沖輸出管腳
(0039) #define M3_pulse0 (PORTC=PORTC&0xef) //PC4字輪電機(jī)脈沖輸出管腳
(0040) #define M2_pulse1 (PORTC=PORTC|0x20) //PC5行走電機(jī)脈沖輸出管腳
(0041) #define M2_pulse0 (PORTC=PORTC&0xdf) //PC5行走電機(jī)脈沖輸出管腳
(0042) #define M1_pulse1 (PORTC=PORTC|0x40) //PC6裝票電機(jī)脈沖輸出管腳
(0043) #define M1_pulse0 (PORTC=PORTC&0xbf) //PC6裝票電機(jī)脈沖輸出管腳
(0044)
(0045) uchar KeyDown; //有功能鍵按下標(biāo)志
(0046) uchar Cancell; //取消功能鍵標(biāo)志
(0047) uint u; //翻頁(yè)步進(jìn)電機(jī)的步數(shù)變量
(0048) uint b; //頁(yè)碼序號(hào)的不同位數(shù)之間差值的中間變量
(0049) uchar FunkeyNum;//功能按鍵的標(biāo)號(hào)變量
(0050) uchar R_Step; //頁(yè)碼序號(hào)之間的距離(數(shù)字間距)所需的步進(jìn)電機(jī)的步數(shù)
(0051)
(0052) //*****************I/O口初始化*****************************
(0053) void IO_Init(void)
(0054) {DDRA=0x00;//A口三態(tài)輸入
_IO_Init:
0020 2422 CLR R2
0021 BA2A OUT 0x1A,R2
(0055) PORTA=0x00;
0022 BA2B OUT 0x1B,R2
(0056) DDRB=0x00;//B口三態(tài)輸入
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) //*************************中斷初始化函數(shù)************************//
(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) //***************************短延時(shí)函數(shù)************************//
(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) //***************************長(zhǎng)延時(shí)函數(shù)************************//
(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) //*************************按鍵掃描函數(shù)************************//
(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); //去抖動(dòng)延時(shí)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; //按鍵的標(biāo)號(hào)變量值賦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); //去抖動(dòng)延時(shí)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; //按鍵的標(biāo)號(hào)變量值賦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); //去抖動(dòng)延時(shí)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; //按鍵的標(biāo)號(hào)變量值賦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) //******************裝票步進(jìn)電機(jī)頻率函數(shù)***********************//
(0104) void PulseZhuangPiao()
(0105) {
(0106) DelayShort(45); //裝票步進(jìn)電機(jī)周期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); //裝票步進(jìn)電機(jī)周期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) //******************翻頁(yè)步進(jìn)電機(jī)頻率函數(shù)***********************//
(0112) void PulseXingZou()
(0113) {
(0114) DelayShort(35); //翻頁(yè)步進(jìn)電機(jī)周期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); //翻頁(yè)步進(jìn)電機(jī)周期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) //******************字輪步進(jìn)電機(jī)頻率函數(shù)***********************//
(0120) void PulseZiLun()
(0121) {
(0122) DelayShort(55); //字輪電機(jī)周期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); //字輪電機(jī)周期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) //***************打印數(shù)碼的電磁擊打錘動(dòng)作函數(shù)******************//
(0128) void Print_Act()
(0129) {
(0130) PRINT_ACT1; //打字電磁鐵打下
_Print_Act:
00A1 9AA9 SBI 0x15,1
(0131) DelayLong(5); //打字電磁鐵打下時(shí)間延時(shí)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); //打字電磁鐵上升時(shí)間延時(shí)20(*1000)us
00A8 E104 LDI R16,0x14
00A9 E010 LDI R17,0
(0134) }
00AA CF94 RJMP _DelayLong
(0135) //***************蓋章的電磁擊打錘動(dòng)作函數(shù)**********************//
(0136) void Sign_Act()
(0137) {
(0138) SIGN_ACT1; //蓋章電磁鐵打下
_Sign_Act:
00AB 9AAA SBI 0x15,2
(0139) DelayLong(20); //蓋章電磁鐵打下時(shí)間延時(shí)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); //蓋章電磁鐵上升時(shí)間延時(shí)20(*1000)us
00B2 E104 LDI R16,0x14
00B3 E010 LDI R17,0
(0142) }
00B4 CF8A RJMP _DelayLong
(0143) //***************翻頁(yè)電機(jī)行走字間距函數(shù)************************//
(0144) void Num_Step()
(0145) {
(0146) M_DIR0; //翻頁(yè)電機(jī)反轉(zhuǎn)
_Num_Step:
00B5 B385 IN R24,0x15
00B6 7F87 ANDI R24,0xF7
00B7 BB85 OUT 0x15,R24
(0147) for(u=0;u<40;u++) //翻頁(yè)電機(jī)行走的字間距即步進(jìn)電機(jī)的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) //***************翻頁(yè)電機(jī)行走抓紙張函數(shù)************************//
(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; //翻頁(yè)電機(jī)反轉(zhuǎn)
00D6 B385 IN R24,0x15
00D7 7F87 ANDI R24,0xF7
00D8 BB85 OUT 0x15,R24
(0157) PulseXingZou(); //翻頁(yè)電機(jī)驅(qū)動(dòng)脈沖輸出
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; //機(jī)械手抓紙
00E0 9AA8 SBI 0x15,0
00E1 C004 RJMP 0x00E6
(0160) while(SONSOR_5==0) //檢測(cè)傳感器5
(0161) {
(0162) M_DIR0; //翻頁(yè)電機(jī)反轉(zhuǎn)
00E2 B385 IN R24,0x15
00E3 7F87 ANDI R24,0xF7
00E4 BB85 OUT 0x15,R24
(0163) PulseXingZou(); //翻頁(yè)電機(jī)驅(qū)動(dòng)脈沖輸出
00E5 DFA5 RCALL _PulseXingZou
00E6 9BB5 SBIS 0x16,5
00E7 CFFA RJMP 0x00E2
(0164) }
(0165) }
00E8 D275 RCALL pop_gset1
00E9 9508 RET
(0166) //***************翻頁(yè)電機(jī)行走上電后復(fù)位函數(shù)********************//
(0167) void Forward_Step()
(0168) {
_Forward_Step:
00EA C002 RJMP 0x00ED
(0169) while(SONSOR_6==0) //檢測(cè)傳感器6
(0170) {
(0171) M_DIR1; //翻頁(yè)電機(jī)正轉(zhuǎn)
00EB 9AAB SBI 0x15,3
(0172) PulseXingZou(); //翻頁(yè)電機(jī)驅(qū)動(dòng)脈沖輸出
00EC DF9E RCALL _PulseXingZou
00ED 9BB6 SBIS 0x16,6
00EE CFFC RJMP 0x00EB
(0173) }
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -