css c for pic 16f877a

Embed Size (px)

DESCRIPTION

css c for pic 16f877a.

Citation preview

CCS C for PIC16F877A

24/06/2008

CCS C for PIC16F877A

Thang8831 http://www.picvietnam.com -1-

CCS C for PIC16F877A

24/06/2008

Mc lcI. Tng quan v CCS101.1. V sao ta s dung CCS ? 1.2. Gii thiu v CCS ? 1.3. Mt s v d cho lp trnh CCS.10 II.Chng ta cng nhau tm hiu ln lt cc phn sau.11

1. I/O_Delay1.2. Input_output.......11 1.3. Nhy LED PortB7..14 1.4. Nhy Led nhiu ch ..15 1.5. iu khin led sng dn.18 1.6. I/O + Delay _ Delay 1s RB018 1.7. Nhy Led RB0.........19 1.8. Delay 1s portB.21 1.9. Delay_Timer0......22 2. ADC25 A. S : B.Code B.1. ADC reading voltage.......25 B.2. LM335_LCD26 B.3. LM335_F877A_LCD160229 B.4. ADC_186...33 3. DAC..36 3.1. DAC_1446..36 4. Timer.37 4.1. Timer038 4.2. Timer139 4.3. Timer239 4.4. frequencymeter..40 5. INTERRUPT..43 5.1. Ngt Timer0...44 5.2. Ngt ngoi .48 5.3. Ngt ngoi trn RB4-RB7 51 5.4. Gii m bn phm .............................................................................................56 5.5. Chng trnh gi k t ra 2x16 LCD dng CCS C ..59 5.7. V d nh v ngt ngoi 61 5.8. Ngt ngoi v n 7 on .62 5.9. Chng trnh hin th phm s ra n 7 on (khng dng interrupt) ...63 5.10. Chng trnh hin th phm s ra n 7 on (DNG INTERRUPT) .64 5.11. Thay i tc n led dung ngt.65 6. Chng trnh v d sau m t cch dng PWM do CCS cung cp....72 7. Tm hiu v LCD ..............................................................................................76 7.1. 8bit interface..77 7.2. 4bit interface..78 7.3. LCD_lib_4bitThang8831 http://www.picvietnam.com -2-

CCS C for PIC16F877A

24/06/2008

7.4. LCD lib 8bits...80 7.5. Hin th LCD 8bit interface..81 7.6. Hin th LCD 4bit interface .86 7.7. LCD_8bit interface, c ki m tra c bn. 86 7.8. LCD and Keypad drive.89 7.9.LM335_F877A_LCD1602106 7.10. LM35_F877A_LCD1602...107 7.11. LM335_F877A_LCD1602.110 7.12. lcd_bargraph..113 7.13. Chng trnh gi k t ra 2x16 LCD dng CCS C113 8. LED ma trn..118 8.1. font_ascii 8.2. font_ascii2..120 8.3. led matrix_Ngat ngoai_COM..122 8.4. led matrix ket noi RS232..128 8.5. led matrix (595 va 154) ket noi rs232..132 8.6. led matrix ver 1.2..136 8.7. 16f877a_8x16_2mau......141 9. ng c....148 9.1. DC Motor 9.1.1. code 9.1.2. Position_Control .151 9.1.3. check_encoder.175 9.2. DK Step Motor...177 9.2.1. Code 9.2.2. Step_motor_F877A 9.2.3. Chng trnh iu khin ng c bc ...181 9.2.4. iu khin ng c bc....183 10. Capture ...187 10.1. Code cho CCS 10.2. S dng capture newcode188 10.3.Capture_LCD_5MH.190 10.4. S dng capture_LCD.193 10.5. S dng capture195 11. SPI....196 12. Cc chun giao tip..197 12.1. Chun giao tip I2C 12.1.1. Master_Slave.204 12.1.1.1. I2Cmaster...204 12.1.1.2. I2Cslave...205 12.1.2. lcd1_lib 12.1.3. lcd2_lib...208 12.2. Giao tip RS232210 Serial Port - lp trnh giao tip ni tip..210 12.2.1. Giao tiep COM_LCD222 12.2.2. USART-RS232...224Thang8831 http://www.picvietnam.com -3-

CCS C for PIC16F877A

24/06/2008

12.2.3. RS232TUT.H..225 12.2.4. RS232TUT..225 12.2.5. RS232TUTDlg227 12.2.6. RS232TUTDlg.CPP...228 12.2.7. StdAfx.H.235 12.2.8. mscomm.H. 12.2.9. mscomm.CPP.237 12.2.10. Giao tiep pc va pic6f877 qua cong rs232...244 13. Ghi c RAM ngoi.246 13.1. S . 13.2. Code...246 Project 1: Kt ni PIC 16F877A vi EEPROM 25AA640.248

Thang8831 http://www.picvietnam.com -4-

CCS C for PIC16F877A

24/06/2008

lp trnh cho PIC, mi ngi c th chn cho mnh nhng ngn ng lp trnh khc nhau nh ASM, CCS C, HT-PIC, pascal, basic,... Vi nhh, u tin tm hiu v vit chng trnh c bn bng ASM hiu r cu trc sau th vit bng CCS C cng vit li nhng ci c bn v i dn ln, tc lc ny nhanh hn khi vit bng ASM rt nhiu. Khi vit bng CCS C thng thng th dch ra file.hex c di hn so vi khi vit bng ASM. Hai ngn ng CCS C v HT-PIC c a chung hn c, CCS C d hc,gn gi vi ASM cn HT-PIC l dng ANSI C. lp trnh v bin dch CCS C, dng chng trnh PIC C Complier,sau khi son tho cc bn n F9, dch,nu thnh cng s c thng bo nh sau:

M u

Ngoi ra, xem code ASM nh th no,sau khi dch bn chn mc C/ASM List nh hnh di y:

Thang8831 http://www.picvietnam.com -5-

CCS C for PIC16F877A

24/06/2008

Link download trnh bin dch CCS C y: http://www.tailieuvietnam.net/downlo...CCSC_3.249.rar Phin bn mi hn ti ti: www.kho.tailieuvietnam.net, vo Download Home > in t tn th > Vi iu khin - Vi x l PLC S dng CCS cho vic lp trnh PIC l rt hay v tin li.Truoc day ban noisepic c cp cch lp trnh cho ccs kh hay. Ta s khai bo thm mt file nh ngha cc thanh ghi ca pic kiu nh : // register definitions #define W 0 #define F 1 // register files #byte INDF =0x00 #byte TMR0 =0x01 #byte PCL =0x02 #byte STATUS =0x03 #byte FSR =0x04 #byte PORTA =0x05 #byte PORTB =0x06 #byte PORTC =0x07 #byte PORTD =0x08 #byte PORTE =0x09 #byte #byte #byte #byte #byte EEDATA EEADR EEDATH EEADRH ADCON0 =0x10C =0x10D =0x10E =0x10F =0x1F

Thang8831 http://www.picvietnam.com -6-

CCS C for PIC16F877A #byte ADCON1 #byte ADRESH #byte ADSESL #byte #byte #byte #byte #byte #byte #byte #byte #byte #byte #byte #byte =0x9F =0x9F =0x9F

24/06/2008

PCLATH =0x0a INTCON =0x0b PIR1 =0x0c PIR2 =0x0d PIE1 =0x8c PIE2 =0x8d OPTION_REG =0x81 TRISA =0x85 TRISB =0x86 TRISC =0x87 TRISD =0x88 TRISE =0x89 =0x18C =0x18D

#byte EECON1 #byte EECON2

//DINH NGHIA BIT #bit RA5 =0x05.5 #bit RA4 =0x05.4 #bit RA3 =0x05.3 #bit RA2 =0x05.2 #bit RA1 =0x05.1 #bit RA0 =0x05.0 #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 =0x06.7 =0x06.6 =0x06.5 =0x06.4 =0x06.3 =0x06.2 =0x06.1 =0x06.0 =0x07.7 =0x07.6 =0x07.5 =0x07.4 =0x07.3 =0x07.2 =0x07.1 =0x07.0 =0x08.7 =0x08.6 =0x08.5

#bit RD7 #bit RD6 #bit RD5

Thang8831 http://www.picvietnam.com -7-

CCS C for PIC16F877A #bit #bit #bit #bit #bit RD4 RD3 RD2 RD1 RD0 =0x08.4 =0x08.3 =0x08.2 =0x08.1 =0x08.0 =0x09.2 =0x09.1 =0x09.0 =0x85.5 =0x85.4 =0x85.3 =0x85.2 =0x85.1 =0x85.0 =0x86.7 =0x86.6 =0x86.5 =0x86.4 =0x86.3 =0x86.2 =0x86.1 =0x86.0 =0x87.7 =0x87.6 =0x87.5 =0x87.4 =0x87.3 =0x87.2 =0x87.1 =0x87.0 =0x88.7 =0x88.6 =0x88.5 =0x88.4 =0x88.3 =0x88.2 =0x88.1 =0x88.0 =0x89.2 =0x89.1 =0x89.0

24/06/2008

#bit RE2 #bit RE1 #bit RE0 #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0

#bit TRISE2 #bit TRISE1 #bit TRISE0

// INTCON Bits for C #bit gie = 0x0b.7 Thang8831 http://www.picvietnam.com -8-

CCS C for PIC16F877A #bit #bit #bit #bit #bit #bit #bit peie = 0x0b.6 tmr0ie = 0x0b.5 int0ie = 0x0b.4 rbie = 0x0b.3 tmr0if = 0x0b.2 int0if = 0x0b.1 rbif = 0x0b.0

24/06/2008

// PIR1 for C #bit pspif = 0x0c.7 #bit adif = 0x0c.6 #bit rcif = 0x0c.5 #bit txif = 0x0c.4 #bit sspif = 0x0c.3 #bit ccp1if = 0x0c.2 #bit tmr2if = 0x0c.1 #bit tmr1if = 0x0c.0 //PIR2 for C #bit cmif = 0x0d.6 #bit eeif = 0x0d.4 #bit bclif = 0x0d.3 #bit ccp2if = 0x0d.0 // PIE1 for C #bit adie = 0x8c.6 #bit rcie = 0x8c.5 #bit txie = 0x8c.4 #bit sspie = 0x8c.3 #bit ccp1ie = 0x8c.2 #bit tmr2ie = 0x8c.1 #bit tmr1ie = 0x8c.0 //PIE2 for C #bit osfie = 0x8d.7 #bit cmie = 0x8d.6 #bit eeie = 0x8d.4 // OPTION Bits #bit not_rbpu = 0x81.7 #bit intedg = 0x81.6 #bit t0cs = 0x81.5 #bit t0se = 0x81.4 #bit psa = 0x81.3 #bit ps2 = 0x81.2 #bit ps1 = 0x81.1 #bit ps0 = 0x81.0 // EECON1 Bits #bit eepgd = 0x18c.7 Thang8831 http://www.picvietnam.com -9-

CCS C for PIC16F877A

24/06/2008

#bit free = 0x18C.4 #bit wrerr = 0x18C.3 #bit wren = 0x18C.2 #bit wr = 0x18C.1 #bit rd = 0x18C.0 Sau ta c th s dng lnh gn PortB = 0x00 xut s tin hn nhiu. Mnh lp trnh cho CCS u dng kiu ny. Khi ta s va tn dng c cc hm c sn ca CCS va thao tc trc tip cc thanh ghi nh bn ASM.

I. Tng quan v CCS1.1. V sao ta s dung CCS ?S ra i ca mt loi vi iu khin i km vi vic pht trin phn mm ng dng cho vic lp trnh cho con vi iu khin . Vi iu khin ch hiu v lm vic vi hai con s 0 v 1. Ban u vic lp trnh cho VK l lm vic vi dy cc con s 0 v 1. Sau ny khi kin trc ca Vi iu khin ngy cng phc tp, s lung thanh ghi lnh nhiu ln, vic lp trnh vi dy cc s 0 v 1 khng cn ph hp na, i hi ra i mt ngn ng mi thay th. V ngn ng lp trnh Assembly. y ta khng ni nhiu n Assmebly. Sau ny khi ngn ng C ra i, nhu cu dng ngn ng C thay cho ASM trong vic m t cc lnh lp trnh cho Vi iu khin mt cch ngn gn v d hiu hn dn n s ra i ca nhiu chng trnh son tho v bin dch C cho Vi iu khin : Keil C, HT-PIC, MikroC, CCS Ti chn CCS cho bi gii thiu ny v CCS l mt cng c lp trnh C mnh cho Vi iu khin PIC. Nhng u v nhc im ca CCS s c cp n trong cc phn di y.

1.2. Gii thiu v CCS ?CCS l trnh bin dch lp trnh ngn ng C cho Vi iu khin PIC ca hng Microchip. Chng trnh l s tch hp ca 3 trnh bin dich ring bit cho 3 dng PIC khc nhau l: - PCB cho dng PIC 12-bit opcodes - PCM cho dng PIC 14-bit opcodes - PCH cho dng PIC 16 v 18-bit Tt c 3 trnh bin dich ny uc tch hp li vo trong mt chng trnh bao gm c trnh son tho v bin dch l CCS, phin bn mi nht l PCWH Compiler Ver 3.227 Ging nh nhiu trnh bin dich C khc cho PIC, CCS gip cho ngi s dng nm bt nhanh c vi iu khin PIC v s dng PIC trong cc d n. Cc chng trnh diu khin s c thc hin nhanh chng v t hiu qu cao thng qua vic s dng ngn ng lp trnh cp cao Ngn ng C Ti liu hng dn s dng c rt nhiu, nhng chi tit nht chnh l bn Help i km theo phn mm (ti liu Ting Anh). Trong bn tr gip nh sn xut m t rt nhiu v hng, bin, ch th tin xa l, cu trc cc cu lnh trong chng trnh, cc hm to sn cho ngi s dng Ngoi ra v Ting Vit cng c bn dch ca tc gi Trn Xun Trng, SV K2001 DH BK HCM. Ti liu ny dch trn c s bn Help ca CCS, tuy rng cha y nhng y l mt ti liu hay, nu bn tm hiu v PIC v CCS th nn tm ti liu ny v c. a ch Download ti liu: www.picvietnam.com -> Mc ni v CCS.

1.3. Mt s v d cho lp trnh CCSVi mc tiu gip ngi c nhanh chng lm bt c cch lp trnh C cho PIC thng qua chng trnh dch CCS. Di y ti gii thiu mt vi bi lp trnh n gin cho PIC, cc bi mu ny da theo ti liu tutorial ca Nigel nh qut LED, LED 7 thanh, LCD, bn phm, cch dng cc giao tip ca PIC giao tip vi thit b ngoi vi nh Real Time IC, ADC, EEPROM Yu cu v phn cng ti thiu cn c thc hnh: - PIC16F877A ( hoc 16F876A hay 16F88) = 50K (Tt nht l PIC16F877A) - 1 Board cm linh kin (ti thiu ) = 40K Thang8831 http://www.picvietnam.com - 10 -

CCS C for PIC16F877A

24/06/2008

- Thch anh 20MHz, t 22pF, 10uF, tr 10K, 4K7, 330, nt bm = 10K - 10 LED n xanh hay , 4 LED 7 thanh (loi 4 LED lin mt ) = 15K - MAX232 giao tip my tnh () = 10K Tng cng l: 125K Phn cng m rng - LCD 1602A loi 2 dng 16 k t (Nu c LCD 2002 cng tt) = 65K (Minh H c bn) - Real Time IC DS1307 hay DS1337 = 25K (c th xin sample ca Maxim-IC) - EEPROM AT24Cxx - ADC/DAC IC loi 12-bit tr nn (ADC 10-bit th PIC cng c) - Sensor nhit LM335 hay LM35 = 13K - ng c bc, ng c mt chiu Mc ch chnh ca ti trong vic gii thiu cc v d di y l nhm gip mi ngi nhanh chng nm c k thut lp trnh bng CCS, thng qua cc v d mi ngi s hiu cc hm ca CCS, cch s dng trong tng ng dng c th. V chi tit ca mi hm ti s khng trnh by k ti y, bit r ta c th xem trong phn Tr gip ca CCS hay ti liu ca tc gi Trn Xun Trng, trong ni kh y . Ti nhn mnh mt iu khi mi ngi tm hiu v PIC v CCS l hy t mnh tm hiu l chnh, t vic nghin cu ti liu, tm ti liu cho n thit k mch v vit chng trnh. Nhng g ti y ch l c bn, cn vic pht trin, s dng ht im mnh ca PIC v CCS l pha mi ngi. Chc thnh cng! Mt iu ch l tt c cc mch in v code ti trnh by di y ti u lp mch tht trn bo cm v chy tt. Cc bc i cho em hi, vy em mun nhng mt on ASM vo trong 1 function ca CCS th em phi nhng nh th no ? Dng cc directive #ASM v #ENDASM bc on code . c thm hng dn v hai directive ny trong ti liu hng dn ca CCS, c v d. Em tht s khng hiu cu ny:" (nu dng hai th chn du "|" gia) " anh NHH c th minh ha cho em c khng? em mi tm hiu v Pic c mt tun, nhng chc chn l anh ch r hn th em s hiu! cm n anh v chc anh vui! Chn v d nh vy n : V d chn Timer0, chia prescaler 1:2 Code:setup_timer_0(CC_INTERNAL|RTCC_DIV_2);

II.Chng ta cng nhau tm hiu ln lt cc phn sau:1.I/O + Delay 2.Timer v ngt Timer 3.Ngt ngoi 4.ADC, PWM,... (tp trung m x nhiu) 5...... Tm thi c nh vy , sau ny s tnh tip!

1. I/O_Delay 1.3. Input_output//================================================= ======= // Ten chuong trinh : Thuc hien vao ra // Nguoi thuc hien : linhnc308 // Ngay thuc hien : 1/09/2006 // Phien ban : 1.0 // Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz Thang8831 http://www.picvietnam.com - 11 -

CCS C for PIC16F877A

24/06/2008

//================================================= ======= #include #include #device *=16 ADC=10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #CASE // Dinh nghia ten cac cong ra #define Relay1 RD0 #define Relay2 RD1 #define Relay3 RD2 #define Relay4 RD3 #define Relay5 RD4 #define Relay6 RD5 #define Relay7 RD6 #define Relay8 RD7 #define Relay9 RC4 #define Relay10 RC5 #define Relay11 RC6 #define Relay12 RC7 #define #define #define #define #define #define #define #Define In1 In2 In3 In4 RA0 RA1 RA2 RA3

AllRelay1 PORTD // PIN D0 : D7 AllRelay2 PORTC // PIN C4 : C7 Step PORTB AllInput PORTA

#define OFF 0 #define ON 1 #define OutEnable1 TRISD // Relay Output #define OutEnable2 TRISC // Relay Output #define InEnable TRISA // Input #define StepEnable TRISB // Step Motor #define PWM_Enable TRISC2 // PWM, PIN_C2 void main() { int16 DutyCycle; delay_ms(250); // Khoi tao che do vao ra OutEnable1 = 0x00; OutEnable2 = 0x0F; InEnable = 0x0F; StepEnable = 0; Thang8831 http://www.picvietnam.com - 12 -

CCS C for PIC16F877A PWM_Enable = 1; // Khong cho phep xuat PWM //===================================== // Khoi tao cho bo PWM setup_ccp1(CCP_PWM); // CCP1_PINC2 as a PWM // CycleTime = (1/clock)*4*t2div*(period+1) // Clock=20000000 and period=127 (below) // Tinh toan tan so PWM phat ra: // (1/10000000)*4*1*128 = 51.2 us or 19.5 khz // (1/20000000)*4*2*128 = 51.2 us or 19.5 khz // (1/10000000)*4*4*128 = 204.8 us or 4.9 khz // (1/10000000)*4*16*128= 819.2 us or 1.2 khz //setup_timer_2(T2_DIV_BY_1, 31, 1); // 78.12KHz //setup_timer_2(T2_DIV_BY_1, 255, 1); // 19.53KHz duty = 0..1023 setup_timer_2(T2_DIV_BY_4, 255, 1); // 4.5KHz //setup_timer_2(T2_DIV_BY_16, 127, 1); // 1.2KHz //set_pwm1_duty(value); // This sets the time the pulse is //=================================== // Test Mode OutEnable2 = 0x0F; delay_ms(10); Step = 0x00; // Motor Stop AllRelay1 = 0x00; AllRelay2 = 0x00; // Mo toan bo cac Role DutyCycle = 1023; set_pwm1_duty(DutyCycle); // Chay bo PWM PWM_Enable = 1; while (TRUE) { AllRelay1 = 0x00; Relay12 = ON; // Mo toan bo cac Role delay_ms(1000); AllRelay1 = 0xFF; Relay12 = OFF; // Dong toan bo cac Role delay_ms(750); if (DutyCycle == 1024) DutyCycle = 1024; if (In1 == 0) { DutyCycle += 64; set_pwm1_duty(DutyCycle); // Chay bo PWM } if (DutyCycle == 0) DutyCycle = 0; if (In2 == 0) { DutyCycle -= 64; set_pwm1_duty(DutyCycle); // Chay bo PWM } delay_ms(250); } Thang8831 http://www.picvietnam.com - 13 -

24/06/2008

CCS C for PIC16F877A } /* #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3) #int_xxx // Khai bao chuong trinh ngat xxx_isr() { // Code here } void Ten_chuong_trinh_con(Bien) { // Code here } */

24/06/2008

1.3. Nhy LED PortB7

CODE: #include #include #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) //#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) //#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3) //#int_xxx //xxx_isr() //{ // Code here //} // Khai bao chuong trinh ngat

Thang8831 http://www.picvietnam.com - 14 -

CCS C for PIC16F877A main() { //thiet lap che do cho portb trisb=0x00; portb=0xff; while (true) { portb=0; delay_ms(500); portb=0x80; delay_ms(500); } }

24/06/2008

1.4. Nhy Led nhiu ch #include #include #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) int8 mode,i; byte temp; #INT_EXT EXT_ISR() { mode++; if (mode==9) mode = 0; } // End of INT void void void void void void void void program1(); program2(); program3(); program4(); program5(); program6(); program7(); program8();

void main() { trisd = 0x00; trisb = 0xFF; portd=0xff; enable_interrupts(int_EXT); ext_int_edge(L_TO_H); enable_interrupts(GLOBAL); mode = 0; while (1) { Thang8831 http://www.picvietnam.com - 15 -

CCS C for PIC16F877A switch(mode) { case 1: program1(); case 2: program2(); case 3: program3(); case 4: program4(); case 5: program5(); case 6: program6(); case 7: program7(); case 8: program8(); } } } void program1() { PortD = 0x00; delay_ms(250); Portd = 0xFF; delay_ms(250); } void program2() { temp = 0xFF; for (i=0;i>= 1; } } void program3() { temp = 0xFF; for (i=0;i RC6, chan9 -> RC7 chan8 -> chan3 DB9, chan7 -> chan2 DB9, chan5 DB9 -> GND Kenh AN0 cua PIC noi den chan V_out LM335 Nut bam noi tai chan RB0 -> nhan ngat ngoai Thach anh loai 20MHz, tu 22pF ============================================== - Designer: [email protected] - Chuc thanh cong cung VDK PIC */ #include #include #device *=16 adc=10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) #include Thang8831 http://www.picvietnam.com - 29 -

CCS C for PIC16F877A int8 low,high,key,mode,min,max,mode1,i; int1 blink,on_off,blink_min,blink_max; int1 do_F; void convert_bcd(int8 x); void set_blink(); void bao_dong(); void test(); //----------------------------------------------------------------void main() { float value; on_off =1; min =15; //nhiet do min default max =35; //nhiet do max default do_F =0 ; i=0; mode =0 ; mode1 = 0 ; blink=0 ; trisa = 0xFF; trisb = 0x01; trisd = 0x00;

24/06/2008

printf("Chuong trinh do nhiet do\n"); LCD_init(); Printf(LCD_putchar,"Lop DT8 - BKHN"); LCD_putcmd(0xC0); Printf(LCD_putchar,"Khoi tao..."); // Khoi tao cho ngat ngoai enable_interrupts (INT_EXT); ext_int_edge(H_TO_L); enable_interrupts (GLOBAL); // Khoi tao che do cho bo ADC setup_adc_ports(AN0); setup_adc(ADC_CLOCK_INTERNAL); delay_us(10); // Lay mau nhiet do lan dau tien value=(float)read_adc(); value = (value - 558.5)/2.048; // For 5V supply // value = (value - 754.8)/2.048; // For 3.7V Supply // value = (value - 698.2)/2.048; // For 4V supply convert_bcd((int8)value); // Chuyen doi tach so tram, chuc, donvi de hien thi len LED 7 delay_ms(1000); LCD_putcmd(0xC0); Printf(LCD_putchar," Init OK"); while(1) { if (i==15) Thang8831 http://www.picvietnam.com - 30 -

CCS C for PIC16F877A { value = read_adc(); value=(value-558.5)/2.048; if (do_F==1) value=1.8*value+32; convert_bcd((int8)value); printf("\n\rNhiet do phong: %u",value); LCD_putcmd(0xC0); printf(LCD_putchar," T = "); LCD_putchar(high); LCD_putchar(low); if (do_F==0) printf(LCD_putchar," C"); else printf(LCD_putchar," F"); i=0;

24/06/2008

} i++; if(((int8)value > 40) || ((int8)value < 15)) on_off=1; else { on_off = 0; LCD_Putcmd(0xCF); LCD_putchar(" "); blink=0; } if (on_off==1) { if (blink==0) { LCD_Putcmd(0xCF);LCD_putchar("!");blink=1;delay_ms(250);} else {LCD_Putcmd(0xCF);LCD_putchar(" ");blink=0;delay_ms(250);} } } } //end main----------------------------------------------------------#INT_EXT void test() { if (do_F == 1) do_F=0; else do_F=1; } void set_blink() { switch(mode) { case 1: blink_min=1; break; case 2: {blink_max=1; blink_min=0;} break; case 3: {mode=0; blink=0; blink_min=0; blink_max=0;} } } void convert_bcd(int8 x) { low=x%10; //chia lay phan du, so hang don vi high=x/10; //tach hang tram va hang chuc Thang8831 http://www.picvietnam.com - 31 -

break;

CCS C for PIC16F877A low = low + 0x30; high = high + 0x30; } void bao_dong(){ int8 i; if (blink == 0) blink = 1; else blink=0; for(i=0;i