![]() |
Trích:
Bạn xem lại khai báo ban đầu vì chắc bạn đã khai báo #device *=16 ADC=8 sau khi khai báo #fuses và #use :D |
- Ko nhất thiết phải dùng cả hàm ngắt ở bài toán này, mình muốn Em_ku tự viết lại bài đó theo cách khác nhưng ko biết hắn biến đâu mất. Và code của Em_ku hoàn toàn có thể giữ nguyên chỉ sửa vài chỗ thôi là có thể chạy đúng.
- Như mình phân tích ở trên thì khi i==0 timer0 đã bị tràn rồi và cờ TMR0IF khi đó đã bằng 1, nhưng mà vấn đề là ở chỗ mỗi khi i tăng lên thì quá trình phải lặp lại như vậy (phải lặp lại thì mới đảm bảo trễ đúng 1s như đã tính toán) thế thì mỗi lần i nhận đc một giá trị thì timer0 phải tràn rồi đếm lại từ đầu một lần. Vậy chỉ cần đặt cụm Code:
TMR0IF=0; Code:
for (i=0;i<=so;i++) |
Hi !!!
Tôi cũng chẳng bít hẳn biến đâu mà mất tiêu Nhưng anh em mình chỉ mún nói 1 chút về Timer0 thui Còn đơn giản nhất thì anh em mình vẫn có thể dùng Delay_ms() mà :D |
đang đợi bài viết sample SPI cho PIC ?
|
tôi mới tự học viết chương trình bằng c thông qua các bài viết trên diễn đàn.
đây là chương trinh bàn phim hex .các bạn xem dùm code đã được hay chưa? //************************************************** *************************** // nguoi thuc hien : tdm // ngay : 21/11/2009 // phan cung: PIC16F877A // ten bai:ban phim hex //************************************************** *************************** #include <16F877A.h> #include <def_877a.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) int a,b,n;// khai bao bien // Chuong trinh chinh void su_ly_ma(void);//khai bao chuong trinh con void main() { TRISB =0xf0; TRISC = 0; PORTB =0; PORTC =0; b=0x01; n=0; while(1)//vong lap chinh { PORTB =b; if(RB4=1) { delay_ms(10);//chong rung phim if(RB4=1) { a=0; su_ly_ma();//goi chuong trinh con } } while(RB4=1)//cho phim nha { } delay_ms(10);//chong rung phim //******************************* if(RB5=1) { delay_ms(10);//chong rung phim if(RB5=1) { a=1; su_ly_ma();//goi chuong trinh con } } while(RB5=1)//cho phim nha { } delay_ms(10);//chong rung phim //******************************* if(RB6=1) { delay_ms(10);//chong rung phim if(RB6=1) { a=2; su_ly_ma();//goi chuong trinh con } } while(RB6=1)//cho phim nha { } delay_ms(10);//chong rung phim //******************************* if(RB7=1) { delay_ms(10);//chong rung phim if(RB7=1) { a=3; su_ly_ma();//goi chuong trinh con } } while(RB7=1)//cho phim nha { } delay_ms(10);//chong rung phim //********************************** rotate_left(&b,1); if(b>9) { b=0x01; n=0; } ++n;// tang n len 1 }// vong lap }//ket thuc chuong trinh //************************** //khai bao chuong trinh con void su_ly_ma(void) { if(n=0) { PORTC =a; } if(n=1) { PORTC =a+4; } if(n=2) { PORTC =a+8; } if(n=3) { PORTC =a+12; } } |
1 Attachment(s)
đây là file của phim hex:
|
Không biết cái "if(RB4=1)", "while(RB4=1)",... của bạn là j (hoặc là bỏ đi hoặc là thay bằng phép so sánh "==" chứ bạn lại dùng phép gán ở đây sao đc).
|
Trích:
while(RB4=1): sau khi đọc phím chờ phím nhả (chờ RB4=0) rồi mới đọc tiếp phím. |
Trích:
|
Trích:
|
Mình đang viết chương trình hiển thị trên LCD, mình thấy rất khó khăn để hiểu các chương trình trên diễn đàn nếu không hiểu rõ về bộ điều khiển HD44780U của LCD của Hitachi. Nếu bạn nào cũng đang làm về LCD thì nên đọc datasheet của con này.
|
#INCLUDE<16F877A.H>
#INCLUDE<def_877a.h> #FUSES XT,NOWDT,NOPROTECT #USE DELAY(CLOCK=20000000) #DEFINE RS RE2 #DEFINE RW RE1 #DEFINE E RE0 #DEFINE LCD PORTB CONST UNSIGNED CHAR LINE1[]={'D','O','','A','N','','T','O','T','','N','G','H' ,'I','E','P','#'}; CONST UNSIGNED CHAR LINE2[]={'K','I','T','','T','H','U','C','','T','A','P','' ,'P','I','C','','1','6','F','8','7','7','A','','', '#'}; CONST UNSIGNED CHAR LINE3[]={'','','K','H','O','A','','D','T','','-','','T','H','#'} CONST UNSIGNED CHAR LINE4[]={ '','','G','V','H','D',':','P','H','U','N','G','',' B','A','O','','C','H','A','U', '','','S','V','T','H',':','H','U','Y','N','H','',' V','A','N','','T','R','U','N','G' ,'','&','','N','G','U','Y','E','N','','T','U','A', 'N','','V','U','','','#'} doan code nay hok bt sao ma em chay no hok dc em bt no sai o cho defs_16f877a. phai chen file def_877a nhu the nao may anh cho file va chi dum nhe |
Chào các bạn. Mình học tin mới chuyển sang nghiên cứu pic. Hôm nay tìm trên diễn đàn mãi không được cái hàm trả về chiều dài của mảng. bạn nào biết chỉ mình với. thank nhiều:
Mảng A={1,2,3,4,5} muốn xác định chiều dài của nó thì dùng hàm nao? |
Trích:
|
Trích:
bạn viết sai |
Trích:
là lệnh xóa màn hình |
may a oi cho e hoi trong ccs thi thoi gian mac dinh la s , ms hay la us vay...
vi e lap trinh de giai ma remote tv sony nhung khi e get_timer xong roi e ho biet la phai so sanh cai timer nay voi s, ms hay la us nua.. mong cac anh chi giup |
Chào mọi người. E mới chân ướt chân ráo tìm hiểu pic mong mấy huynh chỉ giáo. E có câu hỏi này tuy ngớ ngẩn "Khi vẽ mạch orcad thì làm sao biết gắn các tụ bao nhiêu với chân nguồn ?
|
bạn dùng tụ 104
|
Hỏi code.
#include <16F877a.h>
#define LED1 PIN_B4 //HANG NGHIN #define LED2 PIN_B5 //HANG TRAM #define LED3 PIN_B6 //HANG CHUC #define LED4 PIN_B7 //HANG DON VI #fuses hs, nowdt, put, nolvp, brownout #use delay(clock=20000000) int16 a,b,i,j,dv,chuc,tram,nghin,n; void led7() { nghin=a/1000; a=a%1000; tram=a/100; a=a%100; chuc=a/10; dv=a%10; output_b(dv|0b10000000); //hien hang don vi delay_us(1000); output_b(chuc|0b01000000);//hien hang chuc delay_us(1000); output_b(tram|0b00100000);//hien hang tram delay_us(500); output_b(nghin|0b00010000);//hien hang nghin delay_us(500); } void main() { set_tris_b(0x00);//chon port b lam port dau ra set_tris_d(0x00);//chon port b lam port dau ra while(1) { n++; a=n; led7(); } } e có down trên diễn đàn về đoạn code về led 7 doan. Cho e hỏi trong phần code trên: output_b(dv|0b10000000); có nghĩa là gì. xuất ra portb (dv|0b10000000) là như thế nào ah. |
Trích:
|
phía dưới bên trái có bảng mô phỏng
|
Trích:
mình đã define port rồi,RS=D0,EN=D2,D4-D7,vậy lỗi này có thể do LCD hỏng hay là do khởi tạo chưa đúng? |
Buồn quá! Học PIC qua tutorial mà chỉ được 1 cái tutorial. hix
|
anh ơi, làm sao khắc phục lỗi này vậy anh:
*** Error 18 "def_877a.h.c" Line 1(9,20): File can not be opened Not in "E:\Program Files\PICC\devices\16F877A.h" Not in "E:\Program Files\PICC\dr\16F877A.h" Not in project "C:\Users\NhokPro1234\Documents\pi\project1\16F877 A.h" *** Error 128 "def_877a.h.c" Line 3(1,12): A #DEVICE required before this line 2 Errors, 0 Warnings. |
Nguyễn Nguyễn Nguyễn Nguyễn royal1688
|
Múi giờ GMT. Hiện tại là 06:01 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam