17
PIC-lập trình Thanh gi TRISx(A,B,C,D) là thanh ghi quy định hướng của PORT tương ứng Quy định là PORT xuất hay nhập thì phải tác động vào TRIST Vd: để quy định cho chan là Input ta set bit bằng 1: TRISB7=1//chọn chân RB7 là ngõ vào=> thao tác ghi sẽ không có tác dụng mà chỉ đọc dữ liệu từ bên ngoài đưa vào Vd dể quy định chân là Output ta clear bit đó bằng 0 TRISB6=0//chân RB6 là ngõ ra=>chỉ có thể ghi lên chân này khổng thể đọc trạng thái của chân này Thao tác trên trực tieeos thanh ghi TRISx Vd: TRISB=0x00(00000000)// quy định tất cả các chân của PORTB là ngõ ra(chỉ có thể ghi không thể đọc)-đưa ra//quy định tất cả các chân của PORTB là ngõ vào(chỉ có thể đọc và không thể ghi) Thanh ghi PORTx(A,B,C,D,E) Quy định các trạng thái logic tương ứng Vd: Đặt mức logi trên chân RB7=0: RB7=0;//set mức logic RB7 là mức cao(5v) Thao tác với cả PORT PORTB=0x00; Thanh ghi ANSEL và ANSELH: Quy định tác dụng của chân tương ứng là Analog hay Digital Do PIC16F877a có 14 kênh ADC(AN0 tới AN13)dùng chung với các I/O =.>2 thanh ghi ANSEL và ANSELH quy định các chân đó là chân tín hiệu Analog hay digital -Để chọn pin là là Analog hay Digital ta set hoặc clear bit tương ứng Vd: ANS1=0//pin AN1 là pin Digital ANS2=1;pin AN2 là pin Analog ANSEL=0x00//chân AN0-7 là digital ANSELH=0xff//chân AN8-13 là Anaog *Khi làm việc với thanh chân A: ANCON1 |=0x07//đem or với 0x07, cài đặt chân A0 đén A7 là chế độ Digital TRISA=0x00; // xuất Porta=0x00;// chọn giá trị đầu tiên cho chân *Khi làm việc với 3 chân của port 3: Là hanh ghi 8 bit nhưng chỉ có 3 bit điều khiển ra vào của port E TRISE=0x00;// e là xuất dữ liệu

Lập trình pic hainguyen

Embed Size (px)

Citation preview

PIC-lập trìnhThanh gi TRISx(A,B,C,D) là thanh ghi quy định hướng của PORT tương ứngQuy định là PORT xuất hay nhập thì phải tác động vào TRISTVd: để quy định cho chan là Input ta set bit bằng 1:

TRISB7=1//chọn chân RB7 là ngõ vào=> thao tác ghi sẽ không có tác dụng mà chỉ đọc dữ liệu từ bên ngoài đưa vàoVd dể quy định chân là Output ta clear bit đó bằng 0

TRISB6=0//chân RB6 là ngõ ra=>chỉ có thể ghi lên chân này khổng thể đọc trạng thái của chân nàyThao tác trên trực tieeos thanh ghi TRISxVd: TRISB=0x00(00000000)// quy định tất cả các chân của PORTB là ngõ ra(chỉ có thể ghi không thể đọc)-đưa ra//quy định tất cả các chân của PORTB là ngõ vào(chỉ có thể đọc và không thể ghi)Thanh ghi PORTx(A,B,C,D,E)Quy định các trạng thái logic tương ứngVd: Đặt mức logi trên chân RB7=0: RB7=0;//set mức logic RB7 là mức cao(5v)Thao tác với cả PORTPORTB=0x00;Thanh ghi ANSEL và ANSELH: Quy định tác dụng của chân tương ứng là Analog hay DigitalDo PIC16F877a có 14 kênh ADC(AN0 tới AN13)dùng chung với các I/O=.>2 thanh ghi ANSEL và ANSELH quy định các chân đó là chân tín hiệu Analog hay digital-Để chọn pin là là Analog hay Digital ta set hoặc clear bit tương ứngVd: ANS1=0//pin AN1 là pin Digital

ANS2=1;pin AN2 là pin AnalogANSEL=0x00//chân AN0-7 là digitalANSELH=0xff//chân AN8-13 là Anaog*Khi làm việc với thanh chân A:ANCON1 |=0x07//đem or với 0x07, cài đặt chân A0 đén A7 là chế độ DigitalTRISA=0x00; // xuất Porta=0x00;// chọn giá trị đầu tiên cho chân*Khi làm việc với 3 chân của port 3:Là hanh ghi 8 bit nhưng chỉ có 3 bit điều khiển ra vào của port ETRISE=0x00;// e là xuất dữ liệuKhi muốn nhận dữ liêu từ 3 chân củ PORTE thì chỉ ghi giá trị 1 lên 3 thanh ghi điều khiển của PORTE: TRISE=0x07

Tiết kiệm> tốc đọc hậm lại

*Khởi tạo LCDTRISD = 0 ;delay_ms( 15 ) ; //Cho cho den khi nguon cua LCD dat 4.5vcmd_lcd( 0x0C ) ; //LCD hien thi, khong hien thi con tro, con trokhong nhap nhay.cmd_lcd( 0x38 ) ; //LCD su dung Bus 8bit,hien thi 2 hangcmd_lcd( 0x01 ) ; //Xoa man hinh LCDcmd_lcd( 0x06 ) ; // Noi dung khong dich chuyen//#####################################cmd_lcd( 0x01 ) ;//xóa màn hìnhcmd_lcd( 0x80 ) ; //Con tro o dau dong 1printf(data_lcd,"Group 8 - Hello!");delay_ms( 1000 )

Các hàm trong LCD: thư viện: <lcd.c>:LCD_Init();//khởi tạo LCDLCD_putc(char c)//gửi 1 kí tự ra màn hinhLCD_gotoxy(bytex,byte y)//đưa con trỏ tới vị trí x,yLCD_puts(char*s)//gửi một chuỗi ra LCDLCD_send_byte(Byte address,byte n)lcd_set_cgram_char(w, *p) Write a custom character to the CGRAM.*GIAO TIẾP I2CKhởi tạo cho PIC16f877A#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)Một cố chú ý:I2c_read(); dùng khi còn tiếp tục thao tác với DS1370I2c_read(0); dùng khi đây la thao tác cuối cùng với DS1370, sau đó là lênh ic2_stop();

Hàm LCD:void LCD_Draw_Process(unsigned char leng){ unsigned char i,j ; Lcd_cmd(_LCD_CURSOR_OFF); Lcd_Out_Cp("LOADING...");

for(i=1;i<=leng;i++) { CustomChar(2,i); } for(i=1;i<=leng;i++) { CustomChar2(2,i); delay_ms(90); }}

NGẮT PICCó 15 nguồn ngắtVới thanh ghi IntconVới bit điều khiển ngắt là GIE INTCON<7>//bít thứ 7 của thanh ghi INTCONBit GIE mặc định là 0(lúc này sẽ cấm tất cả các ngắt không chi ngawts nào xảy ra), khi muốn sử dụng 1 ngắt nào đó thì phải set ngắt đó lên 1 đồng thời set bit GIE lên một thì mới sử dụng dk ngắtKhi có ngắt xảy ra thì GIE sẽ tự động xóa đí-PIC 16f87Xa có duy nhất 1 địa chỉ ngắt 0004hCần kiểm tra xem ngắt nào đang xảy ra bằng cách kiểm tra cờ báo, cờ báo =1 thì là ngắt ngoài-Cờ báo ngắt phải xóa bằng code khi lập trìnhKhi chương trình từ chương trình đang ở ngắt và quay lạ CT chính thì đồng thời set bit GIE =1 để chó phép ngắt toàn cục để khi có ngắt xảy ra thì nó mới cho phép nhảy vào ngắt tiếp

++NGẮT NGOÀI:chân RB0/int

*THAO TÁC VỚI NÚT NHẤN_ CHỐNG DỘ PHÍM

;

Bộ định thời:

ADC: