PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 18-11-2014, 03:50 PM   #76
hoacvxd
Nhập môn đệ tử
 
Tham gia ngày: Oct 2013
Bài gửi: 1
:
Tôi đang thử nghiệm với con PIC 16F716. Khi mô phỏng trên Proteus thì không có vấn đề gì, mọi thứ suôn xẻ nhưng khi nạp vào IC thì không chạy.
Chương trình viết trên CCS.
Xin hỏi mọi người lỗi tại đâu.
Cảm ơn mọi người.
Hình Kèm Theo
File Type: png KhaoSat16F716.png (64.1 KB, 1 lần tải)
hoacvxd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-11-2014, 01:08 PM   #77
matmatinhyeu
Nhập môn đệ tử
 
Tham gia ngày: Oct 2012
Bài gửi: 4
:
chào các bạn anh chị. hiện tại mình đang viết chương trình robot Micromouse, mình đang vướng mắc phần thanh ghi Stack trong PIC 18f4550, mình sử dụng CCS C. các bạn hay anh chị nào có thể chỉ cho mình cách thức đọc và ghi vào stack được không ạ:
cụ thể như sau:
STACK của e là 1 mảng có 64 byte khai báo: int8 stackstr[64];
biến con trỏ thanh ghi được khai báo: int: stack_pointer=0;
- khi đọc tài liệu liên quan đến stack register thì vẫn không hiểu nguyên lý hoạt động của nó, làm thế nào để đẩy 1 giá trị vào stack, sau đó lấy nó ra so sánh xong rồi thực hiện vòng lặp liên tục cho đến khi stack rỗng?. Chỗ mình không hiểu là như thế nào là Stack rỗng? và làm sao để biết nó đã rỗng? rổng có phải là giá trị =0 hay là không gán giá trị gì không ạ?
Giúp mình gấp với nhé, Cảm ơn cả nhà nhiều
matmatinhyeu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-02-2015, 09:41 PM   #78
msterdang
Nhập môn đệ tử
 
Tham gia ngày: Oct 2014
Bài gửi: 1
:
có thể giúp em về lệnh retlw,với thanh ghi PC được ko ạ.em viết chương trình đếm 0-9 sử dụng bảng dữ liệu cho led7 đoạn .mà sao xem debug nó cứ lặp lại chương trình từ :main - đến goto bangma đên retlw 0xC0 .chương trình đây ạ.mong các anh giúp đỡ.

#include "p16F887.inc"

; CONFIG1
; __config 0xE0D2
__CONFIG _CONFIG1, _FOSC_HS & _WDTE_OFF
; CONFIG2
; __config 0xFFFF
__CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF
;--------------------khi bao bien--------------
cblock 0x20 ;start of general purpose registers

vong1,vong2,vong3
endc
;************************************************* *********************

;----------------------chong trinh chinh----------------------------------------
org 0x00

goto main ;

org 0x05 ;
main
bsf STATUS,5;
clrf TRISD ; chon port d la cong out
bcf STATUS,5
clrf PORTD
start ; chuong trinh dem
movlw d'0'
goto bangma
movwf PORTD;
goto Delay
;---------------------------
movlw d'1'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'2'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'3'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'4'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'5'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'6'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'7'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'8'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'9'
goto bangma
movwf PORTD
goto Delay
goto start
return
;----------------------------------------------------------------
Delay ;chuong trinh con tao tre
movlw d'120'
movwf vong1
movlw d'250'
movwf vong2
movlw d'3'
movwf vong3
decfsz vong1,1
goto $-1
decfsz vong2,1
goto $-3
decfsz vong3,1
goto $-5

return;tro ve ct chinh
bangma ;bang ma cho led
addwf PCL,f
retlw 0xC0
retlw 0xF9
retlw 0xA4
retlw 0xB0
retlw 0x99
retlw 0x92
retlw 0x82
retlw 0xF8
retlw 0x80
retlw 0x90
END
msterdang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-02-2015, 08:36 PM   #79
saunai
Nhập môn đệ tử
 
Tham gia ngày: Sep 2014
Bài gửi: 5
:
Nhờ mọi người xem dùm e cái code viết cho 8 led đơn sáng nhấp nháy dùng ngắt, đưa vào mô phỏng nó cứ sáng hoài k chịu nháy.

#include <16f877a.h>
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=4M)
#byte portb=0x06

int16 dem;
int8 a;
//Chuong trinh ngat timer0
#int_timer0
void interrupt_timer0()
{

++dem;
if (dem==1000) //1000*500us=500000us=0.5s
{
dem=0;
if (a=0x00)
a=0xff;
else a=0xff;
}
set_timer0(6);
}
void main()
{
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6); //Dinh thoi (256-6)*2*1us=500us
a=0xff;
while(true)
{
portb=a;
}
}
saunai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-02-2015, 08:49 AM   #80
buivantuyen89th
Đệ tử 3 túi
 
buivantuyen89th's Avatar
 
Tham gia ngày: Jun 2012
Bài gửi: 54
:
Trích:
Nguyên văn bởi saunai View Post
Nhờ mọi người xem dùm e cái code viết cho 8 led đơn sáng nhấp nháy dùng ngắt, đưa vào mô phỏng nó cứ sáng hoài k chịu nháy.

#include <16f877a.h>
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=4M)
#byte portb=0x06

int16 dem;
int8 a;
//Chuong trinh ngat timer0
#int_timer0
void interrupt_timer0()
{

++dem;
if (dem==1000) //1000*500us=500000us=0.5s
{
dem=0;
if (a=0x00)
a=0xff;
else a=0xff;
}
set_timer0(6);
}
void main()
{
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6); //Dinh thoi (256-6)*2*1us=500us
a=0xff;
while(true)
{
portb=a;
}
}
bạn bi sai trong chương trình ngắt rồi.
thứ nhất: điều kiện trong lệnh if là "==" chứ k phải là "=".
thứ 2: bạn đang đặt chế độ là. nếu a==0 thì cho a=1. còn khác sẽ là a=1. vì vậy a lúc nào cũng=1.
chúc ạn thành công!
buivantuyen89th vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2015, 10:45 AM   #81
saunai
Nhập môn đệ tử
 
Tham gia ngày: Sep 2014
Bài gửi: 5
:
Nhờ cao thủ check dùm đoạn code đk động cơ. THank!!
#include <16F877A.h>
#include <def_877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <lcd_lib_4bit.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(d)

#define tocdo0 0
#define td_macdinh 10
#define tocdo1 100
#define tocdo2 150
#define tocdo3 200
#define tocdo4 250
#define tocdo5 300


int16 bientocdo=0;
INT16 COUNT=0;
INT8 SOLANLAP=0;
int8 nghin,tram,chuc,donvi;
int16 bientocdodat=0;
int16 duty1=0;
int16 duty2=0;
INT16 TOCDOENCODER=100;
INT16 SOXUNGDEM_1PHUT=0;
//int16 x;
int1 bienthuan=0;
int1 biennghich=0;
INT chieu;

#INT_RTCC // Ngat khi timer0 tran

VOID TIMER0() // tao bo dem timer0 dem so xung vao.............RA4
{
COUNT++;
}

#INT_TIMER1

VOID TIMER1() // dinh thoi 1s bang timer1 va tinh toan toc do....
{
set_timer1(15535); // timer 1 se dem 50 000 lan phuc vu cho dinh thoi 1S

solanlap=solanlap+1;

if (solanlap==25)
{
SOXUNGDEM_1PHUT=(((COUNT*255)+GET_TIMER0())*60)/TOCDOENCODER;
SOLANLAP=0;
SET_TIMER0(0);
COUNT=0;
}

}

void tinhtoan_hienthi(int16 x) // thuc hien tach so va dua ra hien thi
{
nghin = x / 1000 ;
x = x % 1000;
tram = x / 100 ; // tách so hàng tram
x = x % 100; // chia lay phan du
chuc = x / 10 ; // tách lay phan chuc
donvi = x % 10 ; // phan don vi

if (chieu==1) lcd_putchar('+');
else lcd_putchar('-');
lcd_putchar(nghin + 0x30);
lcd_putchar(tram+ 0x30);
lcd_putchar(chuc+ 0x30);
lcd_putchar(donvi+ 0x30);
}


void main(void)
{
set_tris_a(0x0ff);
set_tris_b(0x00);
set_tris_d(0xFF);
lcd_putcmd(0x80);
lcd_init();
delay_ms(5);
setup_timer_0 (RTCC_DIV_1|RTCC_EXT_H_TO_L); // Timer0 is Counter
set_timer0(0);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // Timer1 is Timer
set_timer1(12140);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
count = 0;
setup_ccp1(CCP_PWM); //khoi tao bo PWM1
setup_ccp2(CCP_PWM); //khoi tao bo PWM2

setup_timer_2(T2_div_by_16,255,1); //tao chu ky xung Tpwm =(PR2+1)*4*Tosc*N = (255+1)*4*(1/20Mhz)*16 = 0.8 ms


set_pwm1_duty(duty1); //gia tri duty cua PWM duoc tinh
set_pwm2_duty(duty2); //theo cong thuc duty1*t2div/clock
//khoi tao duty=0 ->tat dong co
while(true)
{
if (!bit_test(portD,1)) //neu nhan phim FO : chay thuan
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(1000); //delay 1s de giam quan tinh dc
bienthuan=1;
biennghich=0;
goto next;
}

if (!bit_test(portD,2)) //neu nhan phim RE : chay nghich
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(1000); //delay 1s de giam quan tinh dc
bienthuan=0;
biennghich=1;
goto next;
}

if (!bit_test(portD,3)) //nhan phim toc do 1
{
bientocdo=1;
goto next;
}

if (!bit_test(portD,4)) //nhan phim toc do 2
{
bientocdo=2;
goto next;
}

if (!bit_test(portD,5)) //nhan phim toc do 3
{
bientocdo=3;

goto next;
}

if (!bit_test(portD,6)) //nhan phim toc do 4
{
bientocdo=4;

goto next;
}

if (!bit_test(portD,7)) //nhan phim toc do 5
bientocdo=5;

next:
if (!bit_test(portD,0)) //neu nhan phim OFF
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
bienthuan=0;
biennghich=0;
bientocdo=0; //xoa bien toc do
bientocdodat=0;
}

if (bienthuan)
{
duty2 = tocdo0;
chieu=1;
switch (bientocdo)
{
case 1: duty1= tocdo1;
bientocdodat=100;
break;
case 2: duty1= tocdo2;
bientocdodat=150;
break;
case 3: duty1= tocdo3;
bientocdodat=200;
break;
case 4: duty1= tocdo4;
bientocdodat=250;
break;
case 5: duty1= tocdo5;
bientocdodat=300;
break;
default : duty1 = td_macdinh;
bientocdodat=10;
break;
}
set_pwm1_duty(duty1); //cho dco chay thuan
set_pwm2_duty(duty2);

}

if (biennghich)
{
duty1 = tocdo0;
chieu=0;
switch (bientocdo)
{
case 1: duty2= tocdo1;
bientocdodat=100;
break;
case 2: duty2= tocdo2;
bientocdodat=150;
break;
case 3: duty2= tocdo3;
bientocdodat=200;
break;
case 4: duty2= tocdo4;
bientocdodat=250;
break;
case 5: duty2= tocdo5;
bientocdodat=300;
break;
default : duty2 = td_macdinh;
bientocdodat=10;
break;
}
set_pwm1_duty(duty1); //cho dco chay nghich
set_pwm2_duty(duty2);

}

lcd_putcmd(0x80);
lcd_putchar("Actual:");
lcd_putcmd(0x88);
TINHTOAN_HIENTHI(SOXUNGDEM_1PHUT);
delay_ms(1);
lcd_putcmd(0xc0);
lcd_putchar("Desired:");
lcd_putcmd(0xc8);
TINHTOAN_HIENTHI(bientocdodat);

}
}
saunai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-09-2015, 09:11 AM   #82
teemo
Nhập môn đệ tử
 
Tham gia ngày: Nov 2014
Bài gửi: 9
:
Unhappy

Trích:
Nguyên văn bởi tungbka View Post
Em đang viết chương trình nhận dữ liệu từ máy tính xuống để điều khiển cái động cơ. Nhưng sau khi biên dịch thì xuất hiện cảnh báo sau:
Interrupts disabled during call to prevent re-entrancy: (@MUL1616).
Em có tham khảo các nguồn thì được biết là do trong hàm ngắt và ngoài hàm ngắt em sử dụng lặp lại 1 hàm hay 1 biến gì đó, nhưng em tìm mãi không thấy sai chỗ nào. Mong các pro chỉ giúp. Em cám ơn nhìu.
Chương trình của em như sau:
(Sorry vì em không biết đưa code vào trong ô code ^^!)

Code:
#include <16f877a.h>
#include <def_877a.h>
#include <stdlib.h>
#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=8) 
#include <lcd_lib_4bit.c>
/*#define enter RA2
#define s_t   RA3
#define f_r   RA5
#define up    RE0
#define down  RE1
*/
void ht(int16 a);
//void ht1(int16 a);
void init();
void pid();
void nhapheso();
//void up_down();
int16 count, tocdo, C, temp, temp1, k, tocdodat ;
signed int16 e2=0;
signed int16 e1=0;
int16 e_sum;
int16 e_del;
int16 duty;
float Kp=0;
float Ki=0;
float Kd=0;
int flag=0;
float u, T=0.01;

unsigned char text[30], text2[5] ;
unsigned char a1[5], dem=0, i=0, j=0,i1;

#INT_RDA
void Receive_isr() 
{
text[dem]=getc();
if(text[dem]=='@') //kiem tra dieu kien ket thuc
   {
   flag =1;    //ket thuc nhan, bat co bao
   dem=0;
   }
else dem++;
}
#INT_EXT
void ngatR0()  {
        count++;//set_timer0(0);
      }
#int_timer1
void Timer11_isr() {                // Ham duoc goi khi TImer1 tran (65535->0)
                                   // Chu ky trich mau 0.01
    
      set_timer1(53036);
      tocdo= 30*(count + get_timer0());
     // printf("%ld\t",tocdo);
      count = 0;
      set_timer0(0);

   
    }
void main(){
init();
lcd_putcmd(0x01);
while(true){
                //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
      pid();
if(RC1==0) set_PWM1_duty(duty);
if(RC1==1) set_PWM1_duty(1023 - duty);  
lcd_putcmd(0x80);
ht(tocdo);
printf("n%4Lu",tocdo);


//lcd_putchar("hi");


}
}
void init()
{
   lcd_init();
   nhapheso();
   disable_interrupts(int_rda);
   disable_interrupts(global);
   setup_timer_0 (RTCC_DIV_1|RTCC_EXT_L_TO_H);  // Timer0 is Counter
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_4, 255, 1);//4*4*256*1/20000000=204.8us=4.8khz
   set_timer0(0);
   set_timer1(53036);
   enable_interrupts(INT_RTCC);
   enable_interrupts(int_timer1);
   enable_interrupts(int_ext);
   ext_int_edge(L_TO_H);
   enable_interrupts(GLOBAL);
   lcd_putcmd(0x80);
   count=0;
   trisc=0;
   trisd=0;
   trisa=255;
   trisb=1;
   RC1=0;
   if(C==1) RC1=1;
   If(C==0) RC1=0;
   }
void pid(){
   e2 = tocdodat - tocdo;
   e_sum += e2;
//   e_del = e2 - e1;
//   e1 = e2;
   u = u + Kp*e2 + Ki*e_sum*T;
   if (u>24){
   u=24;
   e_sum -=e2;
   }
   if (u<0){
   u = 0;
   e_sum -=e2;
   }
  duty = u*1023/24;
}
void ht(long a) {
     int nghin,tram,chuc,dvi;
     nghin=a/1000;
     tram=(a%1000)/100;
     chuc=(a%100)/10;
     dvi=(a%10);
     lcd_putchar(nghin+48);
     lcd_putchar(tram+48);
     lcd_putchar(chuc+48);
     lcd_putchar(dvi+48);
}
void nhapheso(){
   lcd_putchar("nhap tu PC");
   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);
while(!flag) ;
if(flag){

              //if ((strchr(text,'T')) && (strrchr(text, '@')))
         
                text2[0] = text[0];
                text2[1] = text[1];
                text2[2] = text[2];
                text2[3] = text[3];
                text2[4] = text[4];
                tocdodat = atol(text2);
               
                //----------------------------------------
                  while (text[i] != 'P')
                    i++;
                  while (text[j] != 'I')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  Kp = atof(a1);
                 
                  printf("P%f",Kp);
                   delay_ms(100);   
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                  i = j;
                  while (text[j] != 'D')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  Ki = atof(a1);
                  printf("I%f",Ki);
                     delay_ms(100);
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                  i = j;
                  while (text[j] != 'C')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  Kd = atof(a1);
                  printf("D%f",Kd);
                     delay_ms(100);
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                  i = j;
                  while (text[j] != '@')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  C = atol(a1);
                  printf("C%Lu",C);
                  flag=0;
                  i=0; j=0;
                  dem=0;
 
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                                                
          } 

}
Không ai trả lời vấn đề này sao???
teemo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-10-2015, 04:44 PM   #83
phongthuy113
Nhập môn đệ tử
 
Tham gia ngày: Oct 2015
Bài gửi: 6
:
Cảm ơn bạn đã chia sẻ thông tin mình đang cần tìm
______________________________________
http://phongthuyviet.info/
Vòng tay đá phong thủy , Vòng tay phong thủy , Đá phong thủy , Trang sức phong thuỷ
Vòng tay phong thủy
phongthuy113 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-03-2016, 01:24 PM   #84
buikhacbinh1996
Nhập môn đệ tử
 
Tham gia ngày: Jan 2016
Nơi Cư Ngụ: ha noi
Bài gửi: 5
:
Trích:
Nguyên văn bởi tungbka View Post
Em đang viết 1 chương trình hiển thị số lên lcd, các hàm của lcd lấy của bác linhnc308. Tuy nhiên chỉ hiển thị được từ 0-255. Mong các cao thủ chỉ giáo để em hiển thị được số có 4 chữ số. Chương trình như sau:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT 
#include <lcd_lib_4bit.c>
#define enter RA2
#define up    RE0
#define down  RE1
void ht(int);
void main()
{
int16 k=0;
while(ENTER)  {
       if(!UP)  {while(!UP);
       if(k<3000)  k++;else k=0;
       }
       if(!DOWN)  {while(!DOWN);
       if(k>0)  k--;else k=3000;
       }
       lcd_init();
      lcd_putchar("k=");
       lcd_putcmd(0x82);
ht(k);
}
       while(!ENTER);
       
    }
void ht(int a) {
     int nghin,tram,chuc,dvi;
     nghin=(int)a/1000;
     tram=(int)(a%1000)/100;
     chuc=(int)(a%100)/10;
     dvi=(int)(a%10);
     lcd_putchar(nghin+48);
     lcd_putchar(tram+48);
     lcd_putchar(chuc+48);
     lcd_putchar(dvi+48);
}
sao mình không dùng được #include <def_877a.h> ở trong picc c nhỉ??
buikhacbinh1996 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-06-2016, 08:48 AM   #85
vanthangv
Nhập môn đệ tử
 
Tham gia ngày: Aug 2014
Bài gửi: 1
:
Các bác pro giúp mình vấn đề này với, mình viết code cho con 16f887 nhưng không biết sai thuật toán hay khai báo thiếu cái gì mà khi mô phỏng nó không chạy, yêu cầu của bài là viết code cho mạch đếm sản phẩm dùng 1 counter và 3 led hiển thị từ 000-100 sang 101 thì nhảy lại về 000, mfinh dùng phần mềm CCS để viết code mô phỏng bằng Proteus bác nào chuyên về PIC chỉ cho mình chỗ sai dc không.

Code:
#INCLUDE <16F887.H>
//KHAI BAO THU VIEN PIC 16F887
#FUSES NOWDT,HS,PUT,NOPROTECT,NOLVP
//KHAI BAO CAU HINH PIC16F887
#USE DELAY(CLOCK=20M)
//KHAI BAO TAN SO BO GIAO DONG = 20MHz
CONST UNSIGNED CHAR MA7DOAN[10]={0X00,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0};
//KHAI BAO MANG MA LED 7 DOAN
UNSIGNED INT8 TO;
//KHAI BAO BIEN T0 O KIEU DU LIEU 8 BIT
VOID MAIN()
//CHUONG TRINH CHINH
{
SET_TRIS_B(0X00); SET_TRIS_C(0X00); SET_TRIS_D(0X00); //SET_TRIS_A(0XFF);
//SET PORT B, C, D CUA VI SU LY LA CONG XUAT DU LIEU
//OUTPUT_B(0XF9); OUTPUT_C(0XA4); OUTPUT_D(0XB0);
SETUP_TIMER_0(T0_EXT_L_TO_H | T0_DIV_1);
//CAI DAT TIMER DUNG BO DEM XUNG NGOAI, DUNG BO CHIA TRUOC VOI TI LE 1:1
SET_TIMER0(0);
//DAT GIA TRI KHOI TAO CHO TIMER0 = 0
WHILE(TRUE)
//VONG LAP VO HAN NEU DIEU KIEN DUNG
TO=GET_TIMER0();
//DAT GIA TRI BIEN T0 = GIA TRI TIMER0
//OUTPUT_B(MA7DOAN[TO/100]);
//XUAT MA 7 DOAN HANG TRAM RA PORT B, MA 7 DOAN = GIA TRI T0 CHIA CHO 100
OUTPUT_C(MA7DOAN[TO/10]);
// XUAT MA 7 DOAN HANG CHUC RA PORT C, MA 7 DOAN = GIA TRI T0 CHIA CHO 10
OUTPUT_D(MA7DOAN[TO%10]);
//XUAT MA 7 DOAN HANG DON VI RA PORT D, MA 7 DOAN = GIA TRI T0 CHIA 10, CHIA TIEP CHO 10 LAY SO DU
}
vanthangv vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-09-2017, 03:34 PM   #86
ngoatnt01
Nhập môn đệ tử
 
Tham gia ngày: Sep 2017
Bài gửi: 3
:
Nội dung bài viết của bạn quá chuẩn, đây toàn là những thông tin mình đang cần, bạn có thể đăng thêm nhiều bài như thế này hơn được không? thanks nhé
ngoatnt01 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-09-2017, 08:05 PM   #87
ngoatnt01
Nhập môn đệ tử
 
Tham gia ngày: Sep 2017
Bài gửi: 3
:
Bài post của bạn quá chuẩn, đây toàn là những thông tin mình đang tìm kiếm, bạn có thể viết thêm nhiều bài như thế này hơn được không? cảm ơn
ngoatnt01 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-09-2017, 08:21 PM   #88
ngoatnt01
Nhập môn đệ tử
 
Tham gia ngày: Sep 2017
Bài gửi: 3
:
Nội dung của bạn quá chuẩn, đây toàn là những thông tin mình đang cần, bạn có thể post thêm nhiều bài như thế này hơn được không? Thanks
ngoatnt01 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-04-2018, 03:33 PM   #89
0977817726
Nhập môn đệ tử
 
Tham gia ngày: Feb 2011
Bài gửi: 1
:
Chào cả nhà.
Chả là thế này tôi mưới học PIC (Tự học). Tôi viết môt chương trình nhỏ trên MicroC fpr pic. Chạy trên proteus thì ok nhưng nạp thì báo lỗ như sau.
"Programming failed at program memory address 0c000000".
Ai đã gặp lỗi này chưa. và giúp mình cách fix lỗi này với.
Tôi dùng. Pic 16f876A mạch nạp Kitpic V2
Chân thành cảm ơn!
0977817726 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:44 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam