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 22-02-2011, 08:43 AM   #1
vinhuct
Nhập môn đệ tử
 
Tham gia ngày: Dec 2010
Bài gửi: 4
:
Em mới học PIC, lại không biết gì về 89C51. Mong các bác chuyển cho Em đoạn code này sang cho PIC8F4431. Em đã chuyển thử nhưng chỉ được đoạn đầu, đoạn sau thì tit.
#include<reg2051.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<absacc.h>
#include <math.h>
#include<intrins.h>
#include<stdlib.h>
//***Khai bao bien****
sbit Clock=P1^0;
sbit STcp =P1^1;
sbit Data =P1^2;

sbit SelGre1=P1^3;
sbit SelGre2=P1^4;
sbit SelRed1=P1^5;
sbit SelRed2=P1^6;


sbit R=P3^2;
sbit Y=P3^3;
sbit G=P3^4;
//*************
unsigned char Code_7S[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF 6};//={0xDE,0x50,0xEC,0xF8,0x72,0xBA,0xBE,0xD0,0xFE,0xF A};
unsigned char LED_BUF[2];

unsigned char tic=0,tic2=0;
Sig_in,Num_Err=0;

char G_inc=0,G_dec=0,
R_inc=0,R_dec=0;

bit Flag_1s;
//**************************************
//**************************************
void wait (unsigned int input){
while (input--){;}
}
void Disp_led(char input){
char i;
if(input<0)input=0;
if(input<100){
LED_BUF[0]=Code_7S[input/10];
LED_BUF[1]=Code_7S[input%10];
}
STcp=0;
Clock=0;
for(i=0;i<=7;i++){
if((LED_BUF[0]&0x80)==0)Data=0;
else Data=1;
Clock=1;
LED_BUF[0]=LED_BUF[0]<<1;
Clock=0;
}
for(i=0;i<=7;i++){
if((LED_BUF[1]&0x80)==0)Data=0;
else Data=1;
Clock=1;
LED_BUF[1]=LED_BUF[1]<<1;
Clock=0;
}
STcp=1;
}
void Init_time(void){
while(G);
TR0=1;
while(!G)if(Flag_1s){Flag_1s=0;G_inc++;}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(G_inc>0){G_dec=G_inc;G_inc=0;}
while(R);
TR0=1;
while(!R)if(Flag_1s){Flag_1s=0;R_inc++;}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(R_inc>0){R_dec=R_inc;R_inc=0;}
}

void main(void){
SelGre1=1;SelGre2=1;
SelRed1=1;SelRed2=1;
wait(5000);
Flag_1s=0;
//---Init timer0--
TMOD=0x11;//khoi tao cho Timer0 o che do timer 16 bits
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
ET0=1;//cho phep ngat Timer0
//---Init timer1--
EA=1;//Cho phep ngat toan cuc
Init_time();
//***********
while(1){
while(G);
TR0=1;Disp_led(G_dec);SelGre1=0;SelGre2=0;SelRed1= 1;SelRed2=1;
while(!G)if(Flag_1s){Flag_1s=0;G_inc++;G_dec--;Disp_led(G_dec);}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(G_inc>0){G_dec=G_inc;G_inc=0;}
SelGre1=1;SelGre2=1;
SelRed1=1;SelRed2=1;
while(R);
TR0=1;Disp_led(R_dec);SelGre1=1;SelGre2=1;SelRed1= 0;SelRed2=0;
while(!R)if(Flag_1s){Flag_1s=0;R_inc++;R_dec--;Disp_led(R_dec);}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(R_inc>0){R_dec=R_inc;R_inc=0;}
}
}
//----------------------------------------------------------------------------------------------------------
void INTTimer0_10ms(void) interrupt 1{
TR0=0;TH0=0xD8;TL0=0xF0;TR0=1;
tic++;
if(tic>=100){
Flag_1s=1;
tic=0;
}
}



Em đã chuyển đoạn đầu như sau:
#include <18F4431.h>
#include <math.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
//***Khai bao bien****
#define Clock PIN_B0
#define STcp PIN_B1
#define Data PIN_B2

#define SelGre1 PIN_B3
#define SelGre2 PIN_B4

#define SelRed1 PIN_B5
#define SelRed2 PIN_B6


#define R PIN_B7
#define Y PIN_D0
#define G PIN_D1
//*************
unsigned char Code_7S[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF 6};//={0xDE,0x50,0xEC,0xF8,0x72,0xBA,0xBE,0xD0,0xFE,0xF A};
unsigned char LED_BUF[2];

unsigned char tic=0,tic2=0,
Sig_in,Num_Err=0;

char G_inc=0,G_dec=0,
R_inc=0,R_dec=0,Flag_1s,TMOD,count;


//**************************************
//**************************************

void Disp_led(char input){
char i;
if(input<0)input=0;
if(input<100){
LED_BUF[0]=Code_7S[input/10];
LED_BUF[1]=Code_7S[input%10];
}
output_low(STcp);
output_low (Clock);
for(i=0;i<=7;i++){
if((LED_BUF[0]&0x80)==0)output_low(Data);
else output_high(Data);
output_high (Clock);
LED_BUF[0]=LED_BUF[0]<<1;
output_low (Clock);
}
for(i=0;i<=7;i++){
if((LED_BUF[1]&0x80)==0)output_low (Data);
else output_high (Data);
output_high (Clock);
LED_BUF[1]=LED_BUF[1]<<1;
output_low(Clock);
}
output_high (STcp);
}
.....
Mong các Bác viết tiếp dùm Em. Cảm ơn nhiều.
vinhuct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-02-2011, 08:51 AM   #2
vinhuct
Nhập môn đệ tử
 
Tham gia ngày: Dec 2010
Bài gửi: 4
:
Em mới học Pic, không hiểu lắm về các timer. Mong các Anh chuyển giúp đoạn code này sang cho PIC, Em đã chuyển thử 1 phần, nhưng đoạn sau thì tit. Cảm ơn các Anh nhiều.
#include<reg2051.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<absacc.h>
#include <math.h>
#include<intrins.h>
#include<stdlib.h>
//***Khai bao bien****
sbit Clock=P1^0;
sbit STcp =P1^1;
sbit Data =P1^2;

sbit SelGre1=P1^3;
sbit SelGre2=P1^4;
sbit SelRed1=P1^5;
sbit SelRed2=P1^6;


sbit R=P3^2;
sbit Y=P3^3;
sbit G=P3^4;
//*************
unsigned char Code_7S[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF 6};//={0xDE,0x50,0xEC,0xF8,0x72,0xBA,0xBE,0xD0,0xFE,0xF A};
unsigned char LED_BUF[2];

unsigned char tic=0,tic2=0;
Sig_in,Num_Err=0;

char G_inc=0,G_dec=0,
R_inc=0,R_dec=0;

bit Flag_1s;
//**************************************
//**************************************
void wait (unsigned int input){
while (input--){;}
}
void Disp_led(char input){
char i;
if(input<0)input=0;
if(input<100){
LED_BUF[0]=Code_7S[input/10];
LED_BUF[1]=Code_7S[input%10];
}
STcp=0;
Clock=0;
for(i=0;i<=7;i++){
if((LED_BUF[0]&0x80)==0)Data=0;
else Data=1;
Clock=1;
LED_BUF[0]=LED_BUF[0]<<1;
Clock=0;
}
for(i=0;i<=7;i++){
if((LED_BUF[1]&0x80)==0)Data=0;
else Data=1;
Clock=1;
LED_BUF[1]=LED_BUF[1]<<1;
Clock=0;
}
STcp=1;
}
void Init_time(void){
while(G);
TR0=1;
while(!G)if(Flag_1s){Flag_1s=0;G_inc++;}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(G_inc>0){G_dec=G_inc;G_inc=0;}
while(R);
TR0=1;
while(!R)if(Flag_1s){Flag_1s=0;R_inc++;}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(R_inc>0){R_dec=R_inc;R_inc=0;}
}

void main(void){
SelGre1=1;SelGre2=1;
SelRed1=1;SelRed2=1;
wait(5000);
Flag_1s=0;
//---Init timer0--
TMOD=0x11;//khoi tao cho Timer0 o che do timer 16 bits
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
ET0=1;//cho phep ngat Timer0
//---Init timer1--
EA=1;//Cho phep ngat toan cuc
Init_time();
//***********
while(1){
while(G);
TR0=1;Disp_led(G_dec);SelGre1=0;SelGre2=0;SelRed1= 1;SelRed2=1;
while(!G)if(Flag_1s){Flag_1s=0;G_inc++;G_dec--;Disp_led(G_dec);}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(G_inc>0){G_dec=G_inc;G_inc=0;}
SelGre1=1;SelGre2=1;
SelRed1=1;SelRed2=1;
while(R);
TR0=1;Disp_led(R_dec);SelGre1=1;SelGre2=1;SelRed1= 0;SelRed2=0;
while(!R)if(Flag_1s){Flag_1s=0;R_inc++;R_dec--;Disp_led(R_dec);}
TR0=0;TH0=0xD8;TL0=0xF0;tic=0;
if(R_inc>0){R_dec=R_inc;R_inc=0;}
}
}
//----------------------------------------------------------------------------------------------------------
void INTTimer0_10ms(void) interrupt 1{
TR0=0;TH0=0xD8;TL0=0xF0;TR0=1;
tic++;
if(tic>=100){
Flag_1s=1;
tic=0;
}
}


Và đây là đoạn Em sửa:
#include <18F4431.h>
#include <math.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
//***Khai bao bien****
#define Clock PIN_B0
#define STcp PIN_B1
#define Data PIN_B2

#define SelGre1 PIN_B3
#define SelGre2 PIN_B4

#define SelRed1 PIN_B5
#define SelRed2 PIN_B6


#define R PIN_B7
#define Y PIN_D0
#define G PIN_D1
//*************
unsigned char Code_7S[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF 6};//={0xDE,0x50,0xEC,0xF8,0x72,0xBA,0xBE,0xD0,0xFE,0xF A};
unsigned char LED_BUF[2];

unsigned char tic=0,tic2=0,
Sig_in,Num_Err=0;

char G_inc=0,G_dec=0,
R_inc=0,R_dec=0,Flag_1s,TMOD,count;


//**************************************
//**************************************

void Disp_led(char input){
char i;
if(input<0)input=0;
if(input<100){
LED_BUF[0]=Code_7S[input/10];
LED_BUF[1]=Code_7S[input%10];
}
output_low(STcp);
output_low (Clock);
for(i=0;i<=7;i++){
if((LED_BUF[0]&0x80)==0)output_low(Data);
else output_high(Data);
output_high (Clock);
LED_BUF[0]=LED_BUF[0]<<1;
output_low (Clock);
}
for(i=0;i<=7;i++){
if((LED_BUF[1]&0x80)==0)output_low (Data);
else output_high (Data);
output_high (Clock);
LED_BUF[1]=LED_BUF[1]<<1;
output_low(Clock);
}
output_high (STcp);
}
....
Không viết được nữa, hiii..Các Ah giúp Em nhé.
vinhuct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2011, 12:09 PM   #3
pttinh1
Nhập môn đệ tử
 
Tham gia ngày: Aug 2010
Bài gửi: 2
:
Trích:
Nguyên văn bởi namqn View Post

9. Đừng thả nổi ngõ vào, kéo lên hoặc kéo xuống các ngõ vào bằng một điện trở 10 k chẳng hạn.
cho mình hỏi thả nổi ngõ vào ở đây là thế nào. Mình đã nạp, cắm pic ,à nó cứ trơ ra, kon lần trước hí hoáy 4 tiếng nó mới chạy lần đầu tiên do mình chạm tay vào chân 13 với 14, kon sau này thì bó tay. mạch nạp và pic vẫn ổn.
pttinh1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-07-2011, 11:00 PM   #4
duyetpham88
Nhập môn đệ tử
 
Tham gia ngày: May 2011
Nơi Cư Ngụ: HCM city
Bài gửi: 9
:
Send a message via Yahoo to duyetpham88
Unhappy mong mọi người giúp đỡ sửa lỗi đoạn code sau

mình làm ví dụ cho xuất số (4 chữ số) ra lcd 16x2 cụ thể là dùng 2 nút nhấn: một nút tăng và một nút giảm cứ nhấn rồi nhả ra thì sẽ tăng hoặc giảm 1 đơn vị nhưng khi mình cho chạy trên protues mới đầu lcd hiện lên 4 con số 0 (0000), khi mình nhấn nút xuống thì lcd hiện chữ u535, mong mọi người xem giùm

// port a là inputs, port d là outputs
int16 nhap_value, y, nghin, tram, chuc, dv;
void main()
{
while(1)
{
doc_bp();
y=nhap_value;
hienthi();
}
}
void hienthi()
{
nghin=y/1000;
tram=(y%1000)/100;
chuc=((y%1000)%100)/10;
dv=((y%1000)%100)%10;

portd =0x38; //hai dong va ma tran 5x7
ghilenh();
portd=0x0C; //bat hien thi, tat con tro
ghilenh();
portd=0xc9;// dua gia tri cua portd len lcd tai vi tri con tro o o so 9 cua hang thu 2
ghilenh();
ghilcd();
}
void ghilcd()
{
portd=mht[nghin];
ghidata();
portd=mht[tram];
ghidata();
portd=mht[chuc];
ghidata();
portd=mht[dv];
ghidata();

}
void ghilenh()
{
e0=0;
e1=0;
e2=1;
e2=0;
delay_ms(10);
}
void ghidata()
{
e2=1;
e0=1;
e1=0;
e2=0;
delay_ms(10);
}
void doc_bp()
{
if(a0==0)
{
do
{}
while(a0==0);
nhap_value++;
}

if(a1==0)
{
do
{}
while(a1==0);
nhap_value--;
}
}
duyetpham88 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-09-2011, 09:20 PM   #5
songk32
Nhập môn đệ tử
 
Tham gia ngày: Nov 2010
Bài gửi: 1
:
máy bác cho m hỏi tý!
theo kinh nghiệm các bác thì m mới học pic nên học gì để lập trình cho pic! hồi trước em có học asm và làm vi điều khiển 8051. giờ e muốn học pic để điều khiển led!
theo các bác nên dùng chương trình nào để viết!
e hỏi để tìm phương hướng học tập thêm!mong các bác tận tình giúp đơ!
thank nhiều!!!
songk32 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-10-2011, 03:53 AM   #6
eethn
Đệ tử 1 túi
 
eethn's Avatar
 
Tham gia ngày: Sep 2011
Bài gửi: 12
:
mọi người giúp phần adc

e đang học con 18f4620,có làm mạch đo nhiệt độ dùng adc trong của pic hiển thị ra led 7 thanh hoặc lcd.Mọi người xem hộ xem lỗi ở đâu mà nó k hiển thị đc.E nghĩ dữ liệu k truyền đc từ adc ra nhưng k hiểu vì sao.E lập trình bằng C18

phần code hiển thị ra led 7 thanh:
Code:
#include "p18f4620.h"
#include "delays.h"
#include "adc.h"
#pragma config OSC=HS, WDT=OFF

const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int a,b,n,doC,dvi,chuc,tram;
void convert(int a)
{
tram=a/100;
a=a%100;
chuc=a/10;
dvi=a%10;
}
void hienthi() // quet led
{
for(n=0;n<10;n++)
{
PORTB=dig[dvi];
PORTD=0x01;       //bat led 1
Delay100TCYx(20);  // tre 100us
PORTB=dig[chuc];
PORTD=0x02;        // bat led 2
Delay100TCYx(20);
PORTB=dig[tram];
PORTD=0x04;         // bat led 3
Delay100TCYx(20);
}
}
 void main(void)
{
TRISB=0;  // chon cong B la cong ra
TRISD=0;   // chon cong D la cong ra
TRISAbits.TRISA0=1;  // chon cong A la cong vao
ADCON0=0x03;                //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh
ADCON1=0x0E;                //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref-
ADCON2bits.ACQT2=1;         //
ADCON2bits.ACQT1=0;         //
ADCON2bits.ACQT0=0;         //3 bits lua chon thoi gian thu thap du lieu TAD
ADCON2bits.ADCS2=1;         //
ADCON2bits.ADCS1=0;         //
ADCON2bits.ADCS0=1;         //3 bits lua chon tan so chuyen doi
Delay10TCY();


b = ReadADC();
doC = (b-558.558)/2.048;  //tùy ADC 8bit hay 10 bit  tính toán giá tri
a = doC;
convert((int)a);
Delay10TCY();
while(1)
{
b = ReadADC();
doC = (b-558.558)/2.048;
convert((int)a);
hienthi();
}
}

và phần ra LCD
Code:
#include "p18f4620.h"
#include "delays.h"
#include "adc.h"
#pragma config OSC=HS, WDT=OFF

char adc;
long s; float doC;
unsigned char li,lj;

#define rs LATDbits.LATD0
#define rw LATDbits.LATD1
#define en LATDbits.LATD2

void delay (unsigned char time )             // ham co tac dung delay thoi gian lon
	{
	    for ( li=0 ; li<80; li++ )
		for ( lj=0 ; lj<time; lj++)
		{}
	}


	void lenh_LCD (unsigned char s)				// ham dua 1 lenh ra ngoai LCD
	{
		LATC=s;
		rs=0;			                        // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh
		rw=0;
		en=1;
		delay(1);
		en=0;
		delay(1); 
	} 


	void data_LCD (unsigned char s)				// ham dua 1 lenh ra ngoai LCD
	{
		LATC=s;
		TRISD=0xF8 ;		   					// cho 3 bit thap nhat duoc lam cong ra
		rs=1;			            // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh
		rw=0;
		en=1;
		delay(1);
		en=0;
	}
void main(void)
{
int kq;
INTCON=0x00;
TRISAbits.TRISA0=1;                      //cong A0 lam dau vao tu cam bien
TRISC=0x00;                              //cong C lam cong ra du lieu
TRISD=0xF8;                              //3 bit thap nhat lam cong ra dieu khien
		lenh_LCD(0x38);					 // dua ra LCD gia tri hang cot la 5*7
		lenh_LCD(0x0C);		    		 // hien con tro
	//	lenh_LCD(0x01);					 // xoa man hinh LCD
ADCON0=0x00;                //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh
ADCON1=0x0E;                //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref-
ADCON2bits.ACQT2=0;         //
ADCON2bits.ACQT1=0;         //
ADCON2bits.ACQT0=1;         //3 bits lua chon thoi gian thu thap du lieu TAD
ADCON2bits.ADCS2=1;         //
ADCON2bits.ADCS1=0;         //
ADCON2bits.ADCS0=0;         //3 bits lua chon tan so chuyen doi
Delay10TCY();

ADCON0bits.ADON=1;
while(1)
{
ADCON0bits.GO=1;
Delay10TCYx(2);
ADCON0bits.GO=0;
adc = ReadADC();
doC=(adc-558.558)/2.048;       // ADC 10 bit  tính toán giá tri
   lenh_LCD(0x01);
   delay(100);
 kq=(int)doC;

   data_LCD((int)doC);
   data_LCD('.');
  kq=(doC-kq)*100;
   data_LCD((unsigned char)kq);
   data_LCD('d');
   data_LCD('o');
   data_LCD('C');
   delay(100);

}
}

mạch ở file kèm theo
File Kèm Theo
File Type: rar nhietdo.rar (93.1 KB, 28 lần tải)

thay đổi nội dung bởi: eethn, 04-10-2011 lúc 09:51 PM.
eethn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-10-2011, 09:50 PM   #7
eethn
Đệ tử 1 túi
 
eethn's Avatar
 
Tham gia ngày: Sep 2011
Bài gửi: 12
:
k ai giúp đc àh?
k biết là do ADC hay phần đưa ra hiển thị nữa
eethn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2012, 02:38 AM   #8
vipboypro891
Nhập môn đệ tử
 
vipboypro891's Avatar
 
Tham gia ngày: Feb 2012
Bài gửi: 8
:
em mới học pic em mới lập trình test led
em khai báo
MOVLW d'11111111'
MOVWF PORTB
thì chỉ có 5 led sáng là ở các chân 0 1 2 3 7
nhưng khai báo
MOVLW 0xFF
MOVWF PORTB
thì tất cả đều sáng cho em hỏi với code thứ nhất em bị sai chỗ nào mọi người giúp em với dc không ạ
vipboypro891 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2012, 11:44 AM   #9
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi vipboypro891 View Post
em mới học pic em mới lập trình test led
em khai báo
MOVLW d'11111111'
MOVWF PORTB
thì chỉ có 5 led sáng là ở các chân 0 1 2 3 7
nhưng khai báo
MOVLW 0xFF
MOVWF PORTB
thì tất cả đều sáng cho em hỏi với code thứ nhất em bị sai chỗ nào mọi người giúp em với dc không ạ
MOVLW b'11111111'//viết thế này mới đúng cú pháp
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2012, 12:53 PM   #10
vipboypro891
Nhập môn đệ tử
 
vipboypro891's Avatar
 
Tham gia ngày: Feb 2012
Bài gửi: 8
:
Trích:
Nguyên văn bởi tdm View Post
MOVLW b'11111111'//viết thế này mới đúng cú pháp
hì thanks bác nhá em nhầm để em test lại xem tnao
vipboypro891 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-02-2012, 10:00 PM   #11
soledad_bkfet
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 3
:
các bác cho e hỏi.e mới bắt đàu học vi xử lý đc2 tuần mà thầy giao bt về nhà là thế này:,
Lập trình asembly cho bài toán: bật tắt đèn LED theo chu kì 1s sử dụng delay (đặt vi điều khiển ở trạng thái không làm công việc gì).Chương trình viết trên MPLAB. bác nào có đoạn code cho em xin cho nó chạy cái, chứ bẳt e viết chắc còn lâu nữa mới xong, mà sắ phải nộp bài rôi, cảm ơn các bác nhiều !!!!!!!
soledad_bkfet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-02-2012, 10:15 PM   #12
soledad_bkfet
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 3
:
Em mới học VXL đc 2 tuần mà thầy gáo yêu cầu bt về nhà như sau:
Lập trình asembly cho bài toán: bật tắt đèn LED theo chu kì 1s sử dụng delay (đặt vi điều khiển ở trạng thái không làm công việc gì). Mong các anh cho em đoạn code bài này, e phải viết trên MPLAB, sắp phải nộp rồi,mong các anh chỉ giáo cho e...thankss các anh !
soledad_bkfet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2012, 11:01 PM   #13
CATBUI7690
Nhập môn đệ tử
 
Tham gia ngày: May 2012
Bài gửi: 1
:
em nho may anh giúp dùm vì sắp nộp đồ án rồi.tình hình là em có dặt làm mach ma em khong hiểu ý nghĩa các lệnh.nhờ mấy anh giải thích dùm.vì em hoc mplab nhung code này viết c em k hiểu

#include <16F877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

#define mode RA0
#define dwn RA1
#define up RA2
//khai bao bien
int16 count=0;
int8 sodem=0;
//int8 chuc,dvi;
const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
//chuong trinh con
#INT_TIMER1 //khai bao ngat de dinh thoi gian
VOID NGAT_TIMER1()
{
SET_TIMER1(15536);
count++;
IF(count==100) //20*50000us = 1000000us = 1s
{
sodem++;
count=0;
}
}

void hienthi()
{
int j =0;
while(j<5)
{
portb=dig[sodem/10];
portd = 0x7f;
delay_us(100);
portd = 0xff;
portb=dig[sodem%10];
portd = 0xbf;
delay_us(100);
portd = 0xff;

portc = 0xff;
j++;
}
}

//chuong trinh chinh
void main()
{
trisa = 0xff; // khai bao cac port deu la ngo ra
trisb = 0x00;
trisd = 0x00;
set_tris_c(0);
SETUP_TIMER_1(T1_INTERNAL); //cho phep cac ngat hoat dong de dem thoi gian
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_TIMER1);
SET_TIMER1(15536); //T_dinhthoi = (65536-15536)*1us = 50000us

while(true)
{
hienthi();
if(sodem>99) sodem=0;
}
}

mấy anh giúp dùm em nhe em càm ơn.
CATBUI7690 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-05-2012, 05:03 PM   #14
h2nd0i
Nhập môn đệ tử
 
Tham gia ngày: May 2012
Bài gửi: 3
:
sửa dùm e cái code mạch đồng hồ này với...

http://www.mediafire.com/?99w2emenq1cxb1i đây là file protues



http://www.mediafire.com/?5be6ku4btajr3wk đây la code asm


http://www.mediafire.com/?1tm1asqxl6cnxeo đây là file .hex


mọi người xem dùm e phần code với,sao em nạp trên protues mà mạch ko chạy là sao ạ?mọi người góp ý kiến dùm e nha.thanks 4rum
h2nd0i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2012, 10:55 AM   #15
kaka_87ht
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 1
:
chắc phải học hỏi từ các bạn nhiều rồi....em mới tham gia pic hii
kaka_87ht 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à 03:30 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