|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
急!急!請(qǐng)教c編譯器的問題! |
作者:wyhuainan 欄目:單片機(jī) |
我用的是mplab ide 6.60+HT-PIC v8.01PL3 我編了個(gè)簡(jiǎn)單的time0定時(shí)中斷程序,但是中斷服務(wù)程序怎么無(wú)法進(jìn)行編譯,就是中斷服務(wù)程序無(wú)法生成匯編代碼。我用HT-PIC v8.01PL3 自帶的timer0.c例子也不行。幫我看看到底是啥原因?謝謝啦! #include <pic.h> /* * Example code for using timer0 on a 17C756 * Just sets up a 1 second interrupt and increments a variable */ /* * Calculate preload VALUE for one second timer */ #define PERIOD 1000000 // period in uS - one second here #define XTAL 4000000 // CRYSTAL frequency - 4MHZ #define ICLK (XTAL/4) // CRYSTAL is divided by four #define SCALE 16 // prescale by 16 - check for overflow! #define PRELOAD PERIOD*ICLK/SCALE/1000000 unsigned LONG seconds; // second count /* service routine for timer 0 interrupt */ void interrupt timer0_isr(void) @ 0x10 { seconds++; TMR0 += -PRELOAD; // re-load timer // no need to clear T0IF - the HARDWARE did it } main() { // initialize timer 0; T0STA = 0b01000; // prescale by 16 T0CS = 1; // SELECT internal clock TMR0 = -PRELOAD; // preload timer T0IE = 1; // enable timer interrupt GLINTD = 0; // enable GLOBAL interrupts for(;;) continue; // let interrupt do its job } |
2樓: | >>參與討論 |
作者: noley 于 2004/11/3 9:34:00 發(fā)布:
中斷用錯(cuò)了! 這個(gè)可以直接跳進(jìn)TMO中斷嗎?有點(diǎn)懷疑!PIC的中斷入口好像只有一個(gè)呀!跟51的不一樣!多看看數(shù)據(jù)手冊(cè)! void interrupt timer0_isr(void) @ 0x10 |
3樓: | >>參與討論 |
作者: fanguluke 于 2004/11/3 9:44:00 發(fā)布:
我有一個(gè)已經(jīng)調(diào)試好的例子。 #include <pic.h> #define time1_hi 0x3C #define time1_lo 0xD3 #define on 1 #define off 0 typedef struct timetype{CHAR HH,MM,SS,CC,Y,M,D;}; struct timetype time; CHAR month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; CHAR data; void leap_year() { if ((time.Y%400==0)||(time.Y%4==0)&&(time.Y%100!=0)) month[1]=29; else month[1]=28; } void reset_time(struct timetype *time) { //time.Y=0 means 2000 year (*time).HH=0;(*time).MM=0;(*time).SS=0;(*time).CC=0; (*time).Y=0;(*time).M=1;(*time).D=1; } void set_time0_int(CHAR ON){if(ON){TMR0IE=1;T0CS=0;}else{TMR0IE=0;T0CS=1;}} void set_time1_int(CHAR ON) { if (ON) {TMR1ON=1;TMR1IE=1;TMR1CS=0;TMR1IF=0;PEIE=1;} else {TMR1ON=0;TMR1IE=0;TMR1CS=1;} } void interrupt timer() { if(TMR0IF) { TMR0IF=0;TMR0=10; RB7=!RB7; } else if (TMR1IF) { TMR1IF=0; TMR1H=time1_hi; TMR1L=time1_lo; if (++time.CC>=20) { time.CC=0; if (++time.SS>=60) { time.SS=0; if (++time.MM>=60) //for exam { time.MM=0; if (++time.HH>=24) { time.HH=0; if (++time.D>month[time.M-1]) { time.D=1; if (++time.M>12) {time.M=1;time.Y++;} else if (time.M==2) leap_year(); }}}}} } } CHAR pppp(int p) {CHAR i,j,ch,g; for (i=0;i<=ch;i++) { j=g; j=g++; } return(j); } void main(void) { int p=2000; PSA=0; //prescale assiged to WDT RBPU=0; // enable weak pull_up set_time0_int(off); set_time1_int(on); GIE=1;time.SS=20; reset_time(&time); while(1) { asm("clrwdt"); p++; pppp(1); } } |
4樓: | >>參與討論 |
作者: wyhuainan 于 2004/11/3 10:15:00 發(fā)布:
多謝樓上2位熱心解答! 多謝樓上2位熱心解答! noley:我提供的是HT-PIC v8.01PL3 安裝好后自帶的例子。我自己編的也不行。 fanguluke:謝謝你提供的程序。我編譯了下,中斷服務(wù)程序還是沒有對(duì)應(yīng)的匯編代碼。 1: #include <pic.h> 2: #define time1_hi 0x3C 3: #define time1_lo 0xD3 4: #define on 1 5: #define off 0 6: 7: typedef struct timetype{CHAR HH,MM,SS,CC,Y,M,D;}; 8: 9: struct timetype time; 10: 11: CHAR month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 12: CHAR data; 13: 14: void leap_year() 15: { 16: if ((time.Y%400==0)||(time.Y%4==0)&&(time.Y%100!=0)) month[1]=29; 00073B 3090 MOVLW 0x90 00073C 00F2 MOVWF 0x72 00073D 3001 MOVLW 0x1 00073E 00F3 MOVWF 0x73 00073F 1283 BCF 0x3, 0x5 000740 1303 BCF 0x3, 0x6 000741 0825 MOVF 0x25, W 000742 00F0 MOVWF 0x70 000743 01F1 CLRF 0x71 000744 120A BCF 0xa, 0x4 000745 118A BCF 0xa, 0x3 000746 27A5 CALL 0x7a5 000747 120A BCF 0xa, 0x4 000748 118A BCF 0xa, 0x3 000749 0871 MOVF 0x71, W 00074A 0470 IORWF 0x70, W 00074B 1D03 BTFSS 0x3, 0x2 00074C 2F4E GOTO 0x74e 00074D 2F62 GOTO 0x762 00074E 0825 MOVF 0x25, W 00074F 3903 ANDLW 0x3 000750 1D03 BTFSS 0x3, 0x2 000751 2F61 GOTO 0x761 000752 2F53 GOTO 0x753 000753 3064 MOVLW 0x64 000754 00F1 MOVWF 0x71 000755 0825 MOVF 0x25, W 000756 120A BCF 0xa, 0x4 000757 118A BCF 0xa, 0x3 000758 276F CALL 0x76f 000759 120A BCF 0xa, 0x4 00075A 118A BCF 0xa, 0x3 00075B 0870 MOVF 0x70, W 00075C 3800 IORLW 0 00075D 1903 BTFSC 0x3, 0x2 00075E 2F61 GOTO 0x761 00075F 2F60 GOTO 0x760 000760 2F62 GOTO 0x762 000761 2F63 GOTO 0x763 000762 2F65 GOTO 0x765 000763 2F64 GOTO 0x764 000764 2F68 GOTO 0x768 000765 301D MOVLW 0x1d 000766 00B1 MOVWF 0x31 17: else month[1]=28; 000768 301C MOVLW 0x1c 000769 1283 BCF 0x3, 0x5 00076A 1303 BCF 0x3, 0x6 18: } 00076C 1303 BCF 0x3, 0x6 19: 20: void reset_time(struct timetype *time) 21: { //time.Y=0 means 2000 year 0006E5 1283 BCF 0x3, 0x5 0006E6 1303 BCF 0x3, 0x6 22: (*time).HH=0;(*time).MM=0;(*time).SS=0;(*time).CC=0; 0006E2 0084 MOVWF 0x4 0006E3 1383 BCF 0x3, 0x7 0006E8 0A2A INCF 0x2a, W 0006E9 0084 MOVWF 0x4 0006EA 1383 BCF 0x3, 0x7 0006EB 0180 CLRF 0 0006EC 082A MOVF 0x2a, W 0006ED 3E02 ADDLW 0x2 0006EE 0084 MOVWF 0x4 0006EF 1383 &n |
5樓: | >>參與討論 |
作者: fanguluke 于 2004/11/3 10:42:00 發(fā)布:
我對(duì)PIC的匯編不是很熟悉,讀還勉強(qiáng),可能我?guī)筒涣四恪?br> |
6樓: | >>參與討論 |
作者: wyhuainan 于 2004/11/3 10:54:00 發(fā)布:
fanguluke兄弟,我對(duì)匯編不感冒,所以才用c的。 你看看,這段中斷服務(wù)程序確實(shí)沒有對(duì)應(yīng)的匯編!暈死!其他的都有匯編代碼。 我調(diào)試定時(shí)中斷的時(shí)候,怎么都無(wú)法響應(yīng)中斷,一看匯編代碼才知道沒有被編譯。 請(qǐng)兄弟多多指點(diǎn)! 33: void interrupt timer() 34: { 35: if(TMR0IF) { TMR0IF=0;TMR0=10; RB7=!RB7; } 36: else if (TMR1IF) 37: { TMR1IF=0; 38: TMR1H=time1_hi; 39: TMR1L=time1_lo; 40: if (++time.CC>=20) 41: { time.CC=0; 42: if (++time.SS>=60) 43: { time.SS=0; 44: if (++time.MM>=60) //for exam 45: { time.MM=0; 46: if (++time.HH>=24) 47: { time.HH=0; 48: if (++time.D>month[time.M-1]) 49: { time.D=1; 50: if (++time.M>12) {time.M=1;time.Y++;} 51: else if (time.M==2) leap_year(); 52: }}}}} 53: } 54: } 55: |
|
|
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |