PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Học CCS thông qua Tutorial PICVIETNAM (http://www.picvietnam.com/forum/showthread.php?t=689)

letrongdtk4 23-09-2009 11:04 PM

Trích:

Nguyên văn bởi badungdtk3
Mọi người cho em hỏi:
Em viết thử ct ADC nhưng cứ báo lỗi thế này:
" can't change device type this far in to the code"
và con trỏ nằm ở dòng này: #device *=16 ADC=8
Mong nhận được giúp đỡ sớm! Thanks trước nha.


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

nhamdtk4 24-09-2009 09:39 AM

- 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;
setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_16);
set_timer0 (6);

vào trong vòng lặp
Code:

for (i=0;i<=so;i++)
của bạn là xong thôi mà.

letrongdtk4 24-09-2009 09:02 PM

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

noridomoto 24-09-2009 11:39 PM

đang đợi bài viết sample SPI cho PIC ?

tdm 21-11-2009 06:06 PM

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;
}
}

tdm 21-11-2009 06:13 PM

1 Attachment(s)
đây là file của phim hex:

nhamdtk4 22-11-2009 06:00 PM

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).

tdm 23-11-2009 12:53 PM

Trích:

Nguyên văn bởi nhamdtk4 (Post 31494)
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).

if(RB4=1):bit RB4=1 thì đọc phím
while(RB4=1): sau khi đọc phím chờ phím nhả (chờ RB4=0) rồi mới đọc tiếp phím.

nhamdtk4 23-11-2009 02:48 PM

Trích:

Nguyên văn bởi tdm (Post 31535)
if(RB4=1):bit RB4=1 thì đọc phím
while(RB4=1): sau khi đọc phím chờ phím nhả (chờ RB4=0) rồi mới đọc tiếp phím.

Đúng là đọc và chờ nhả, nhưng phải là "if(RB4)" hoặc "if(RB4==1)" còn cái "if(RB4=1)" của bạn thì RB4=1 là gán giá trị logic 1 cho RB4.

tdm 24-11-2009 12:30 PM

Trích:

Nguyên văn bởi nhamdtk4 (Post 31538)
Đúng là đọc và chờ nhả, nhưng phải là "if(RB4)" hoặc "if(RB4==1)" còn cái "if(RB4=1)" của bạn thì RB4=1 là gán giá trị logic 1 cho RB4.

cảm ơn bạn .mình đã sửa theo hướng dẫn của bạn.

nguyenhuytuong 03-01-2010 08:27 PM

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.

chang kho 12-01-2010 07:52 AM

#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

lednghethuat 22-01-2010 10:54 PM

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?

manhdktd 14-06-2010 06:46 PM

Trích:

Nguyên văn bởi anhquangngai (Post 6240)
anh namqn cho em hỏi luôn cái chương trình này:
Code:

//Chuong trinh led sang don o PORTB
/*ket qua o PORTB là:00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000,10000001,10000010,10000100,10001000,.....cuoi cung thi PORTB=0xFF */
#include<16F877A.h>
#include<def_16f877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(b)
int8 sck,slx,bienxoay,bienluu,giatri;
main()
  {
      trisb=0;
    while(true){
      sck=8;
      portb=0;
      delay_ms(100);
      while(sck<1)
        {
            bienxoay=0;
            slx=sck;
          while(slx<1)
              {
              bienxoay=bienxoay<<1;
              giatri=bienluu|bienxoay;
              portb=giatri;
              delay_ms(100);
              slx--;
              }
          bienluu=giatri;
          sck--;
        }
      }
  }

chương trình em viết như thế nhưng sao nó ko chạy và ban đầu em gán cho biến sck=8 thì trong dk while nó có chạy hay ko?
Cảm ơn anh trước!
Em mới học nên ko hiểu!

làm sao chạy được khi giá trị ban đầu của sck=8 ma trong khi bạn kiểm tra vòng lặp while(sck<1)?????

manhdktd 14-06-2010 06:49 PM

Trích:

Nguyên văn bởi tiendungkct (Post 13501)
bạn cũng có thể viết như sau:
while(1)// vong lap luôn đúng
{
for(a=0;a=8;a++)
..................
}

for(a=0;a<8;a++)
bạn viết sai

manhdktd 14-06-2010 09:45 PM

Trích:

Nguyên văn bởi hopeman (Post 20173)
cả hai lệnh này đều là lệnh gọi hàm thôi bạn ơi
vd lcd_init() tức là gọi hàm void lcd_init(void){...} đây có lẽ là hàm khởi tạo cho lcd, còn hàm còn lại là hàm đẩy 1 ký tự (char) đi thôi.

cld_putc('\f')
là lệnh xóa màn hình

thanhphuc15 01-11-2010 09:00 AM

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

haitaccr113 14-12-2010 09:06 AM

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 ?

phamquocgia 01-04-2011 02:20 PM

bạn dùng tụ 104

alycuong 21-05-2011 02:22 AM

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.

alycuong 23-05-2011 10:40 PM

Trích:

Nguyên văn bởi alycuong (Post 45320)
#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.

k có ai giúp e ah.

qiuyinffy 14-06-2011 09:15 AM

phía dưới bên trái có bảng mô phỏng

bbld 05-12-2011 05:46 PM

Trích:

Nguyên văn bởi FFGmember (Post 5609)
LCD cùng với led đơn và led 7 thanh là một trong những phương thức để hiển thị các kết quả các thông số. Thông thường tôi luôn chọn LCD vì lập trình đơn giản và đông thời có thể thể hiện được các giá trị mà mình mong muốn.

Có rất rất nhiều source code cho việc viết LCD 4 bit. Và một trong số đó là file lcd_lib_4bit.c đã đươc linhnc308 giới thiệu trong tập tutorial của mình

Lại thực thi các bước như ở trên, với đoạn code dưới đây.

PHP Code:

#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c> // Thu vien ham cho LCD

void main()
{
trisa 0xFF;
trisb 0x01;
trisd 0x00;
LCD_init();
Printf(LCD_putchar," PICVIETNAM tut");
LCD_putcmd(0xC3);
Printf(LCD_putchar," LCD 4bit ");



[/LIST]

mọi người cho mình hỏi 1 điều là LCD mình mới mua(chưa dùng đựoc lần nào).trong lcd_lib_4bit.c của anh linh có những hàm khởi tạo lcd đúng như nhà sx yêu cầu.vậy sao mình kết nối lcd dùng đoạn code trên thì ko chạy,chỉ hiện 1 dòng đen
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?

ngdnhanbk 11-01-2012 03:18 AM

Buồn quá! Học PIC qua tutorial mà chỉ được 1 cái tutorial. hix

teemo 06-12-2014 10:40 PM

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.

Cannavarojo9 08-09-2017 04:12 PM

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