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 Bài Trong Ngày 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 28-05-2007, 08:57 AM   #76
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Thử xem lại việc quản lý các cờ ngắt.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-05-2007, 09:17 AM   #77
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
HIC HIC, anh nào giup em di
__________________
Cổng trường Đại học cao vời vợi
Đồng ruộng mênh mong đón em về!
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-05-2007, 09:19 AM   #78
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
a anh ơi~! em viết chạy ổn rồi ne!

Code:
#include "E:\ccs c\chuong_trinh_ccsc\banh_kem_duc_thanh\chuong_trinh.h"
#int_RB
RB_isr()
{
int8 y;
  disable_interrupts(INT_RB);
  disable_interrupts(GLOBAL);
  
  
  if ( input(PIN_B6) )         //tang gia tri trong o nho
     {
       y = read_eeprom(0x00);
       if(y<244)
        {
          y = y + 10;
          write_eeprom (0x00,y);
        }
     }
     

 if ( input(PIN_B7) )          //giam gia tri trong o nho
    {

       y = read_eeprom(0x00);
       if(y>10)
       {
         y = y - 10;
         write_eeprom (0x00,y);
       }
      }
      
   
    delay_ms(50);
    
    
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RB);
    
}
//===========CAC CHUONG TRINH CON==============



void tao_tre(int8 x);




//============================================



void main()
{ 


   output_B(0x00);
   output_A(0x00);
   enable_interrupts(INT_RB);
   enable_interrupts(GLOBAL);




   while(1)
    {
      output_high(pin_B0);
      tao_tre(1);
      output_low(pin_B0);
      tao_tre(1);

      output_high(pin_B1);
      tao_tre(1);
      output_low(pin_B1);
      tao_tre(1);

      output_high(pin_B2);
      tao_tre(1);
      output_low(pin_B2);
       tao_tre(1);

      output_high(pin_B3);
      tao_tre(1);
      output_low(pin_B3);
      tao_tre(1);

      output_low(pin_B0);
      output_low(pin_B1);
      output_low(pin_B2);
      output_low(pin_B3);
      tao_tre(1);

      output_high(pin_B0);
      output_high(pin_B1);
      output_high(pin_B2);
      output_high(pin_B3);
      tao_tre(1);

      output_low(pin_B0);
      output_low(pin_B1);
      output_low(pin_B2);
      output_low(pin_B3);
      tao_tre(1);


    }
}
//============================================

void tao_tre(int8 x)
   {
        int8 z,i;

        z = x + read_eeprom (0x00);
        delay_ms(100);
        for(i=0;i<z;++i)
        delay_ms(2);

   }

//===========================================
__________________
Cổng trường Đại học cao vời vợi
Đồng ruộng mênh mong đón em về!

thay đổi nội dung bởi: falleaf, 28-05-2007 lúc 10:09 AM.
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-07-2007, 05:52 PM   #79
Dolphin
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 43
:
+ Cho em hỏi về phần nút bấm với điện trở kéo lên. Khi bấm thì chân ở mức thấp (ok); khi ko bấm thì lam sao biết được trạng thái của chân? (do chân mắc với nguồn qua điện trở nên điện áp ở chân ko biết xác định thế nào, vẫn có thể là H hoặc L).
+ Đặt chân là input với điện áp là 0. Nếu nối chân đó với nguồn 5V thì nó sẽ chuyển từ 0-->5V và dòng điện sẽ chạy từ nguồn vào chân Pic? Còn nếu là output thì sao dòng điện sẽ chạy đi đâu?
Mấy cái này em vẫn chưa thông lắm...
Dolphin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-07-2007, 10:03 PM   #80
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi Dolphin View Post
+ Cho em hỏi về phần nút bấm với điện trở kéo lên. Khi bấm thì chân ở mức thấp (ok); khi ko bấm thì lam sao biết được trạng thái của chân? (do chân mắc với nguồn qua điện trở nên điện áp ở chân ko biết xác định thế nào, vẫn có thể là H hoặc L).
+ Đặt chân là input với điện áp là 0. Nếu nối chân đó với nguồn 5V thì nó sẽ chuyển từ 0-->5V và dòng điện sẽ chạy từ nguồn vào chân Pic? Còn nếu là output thì sao dòng điện sẽ chạy đi đâu?
Mấy cái này em vẫn chưa thông lắm...
1. Thông thường, người ta dùng điện trở vài k để kéo lên cho nút bấm, còn ngõ vào của PIC thì có tổng trở vào khá lớn (hàng megaohm). Do đó, nếu bấm nút thì điện áp đặt vào ngõ vào là 0V, còn không bấm nút thì điện áp đặt vào ngõ vào là điện áp ở điểm giữa của mạch phân áp, với 5V đi qua trở kéo lên, rồi đến điện trở vào hàng megaohm của PIC. Như vậy áp tại ngõ vào của PIC sẽ xấp xỉ 5V, tức là mức cao.

2. Câu này bạn hỏi không rõ ràng: 'Còn nếu là output thì sao dòng điện sẽ chạy đi đâu?'. Nếu bạn muốn biết khi bạn xuất mức cao hay thấp thì dòng điện sẽ chạy ra sao thì câu trả lời thế này: khi bạn xuất mức cao, MOSFET phía cao của cặp transistor ngõ ra sẽ dẫn, do đó ngõ ra là gần bằng 5V và PIC cấp dòng cho tải, nếu có tải thì tùy theo dòng tải mà điện áp ở ngõ ra sẽ bị giảm nhiều hay ít do áp rơi trên MOSFET phía cao. Khi bạn xuất mức thấp, MOSFET phía thấp của cặp transistor ngõ ra sẽ dẫn, do đó ngõ ra là gần bằng 0V và PIC rút dòng từ tải xuống Vss, nếu có tải thì tùy theo dòng tải mà điện áp ở ngõ ra sẽ cao hơn Vss nhiều hay ít do áp rơi trên MOSFET phía thấp. Bạn xem thêm mục I/O Ports trong các datasheet của chip sẽ thấy họ vẽ cấu trúc của ngõ ra.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2008, 07:26 PM   #81
vodka1505
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 8
:
- Bác nào rảnh giải thích giúp em cái hàm Delay này cái:
Code:
Delay 
	Movlw	d’250’
	Movwf	count1
D1	
        Movlw	0xc7
        Movwf	counta
        Movlw	0x01
        Movwf	countb
Delay_0
	Decfsz	counta, f
	Goto		$+2
	Decfsz	countb, f
	Goto		Delay_0
	Decfsz	count1, f
	Goto		D1
	Return
- em chưa hiểu về cái lệnh này "Goto $+2"?
- và lệnh "Goto Delay_0" với "Goto D1" thì có gì khác nhau? em thấy trong một số hàm Delay người ta chỉ dùng có lệnh "Goto Delay_0"
Em xin cảm ơn rất nhiều.

thay đổi nội dung bởi: namqn, 30-03-2008 lúc 07:52 PM.
vodka1505 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2008, 07:55 PM   #82
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
$ là địa chỉ lệnh hiện hành, $ + 2 là ô nhớ lệnh cách vị trí hiện hành 2 đơn vị.

Với ví dụ trên của bạn (giả sử viết cho PIC16), lệnh GOTO $ + 2 dùng để chuyển điều khiển đến lệnh GOTO Delay_0 nếu sau khi giảm biến counta kết quả vẫn khác 0 (tức là nếu sau khi giảm counta mà counta vẫn khác 0 thì bỏ qua lệnh giảm countb).

Đoạn chương trình trên dùng 3 biến đếm, do đó nếu cập nhật counta, rồi countb, thì sẽ đến lượt count1 được cập nhật. Do đó cần dùng các nhãn Delay_0 hay D1 cho các lệnh GOTO một cách thích hợp.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2008, 08:51 PM   #83
vodka1505
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 8
:
- Cảm ơn anh Nam đã giúp đỡ:
em viết hàm delay như này được không? và hai cái này khác nhau ở chỗ nào?
Code:
Delay 
	Movlw	d’250’
	Movwf	count1
        Movlw	0xc7
        Movwf	counta
        Movlw	0x01
        Movwf	countb
Delay_0
	Decfsz	counta
	Goto	 Delay_0
	Decfsz	countb
	Goto	 Delay_0
	Decfsz	count1
	Goto	 Delay_0
	Return
vodka1505 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-04-2008, 03:26 PM   #84
vnchampion
Nhập môn đệ tử
 
vnchampion's Avatar
 
Tham gia ngày: Apr 2008
Bài gửi: 5
:
Chài khó hiểu quá mấy bác ơi
vnchampion vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-04-2008, 09:35 PM   #85
thaile
Nhập môn đệ tử
 
Tham gia ngày: Mar 2008
Bài gửi: 6
:
PIC16 thì em không biết nhưng với PIC18F4580 thì không cần lưu lại giá trị của PCLATH :
1>Bình thường nếu không có tác động trực tiếp thì thanh ghi PCLATH sẽ không thay đổi giá trị, kể cả khi PC thay đổi từ địa chỉ 0xFF đến 0x100. Lúc đó PCL=00 và PCLATH=00. ( Kết quả có được nhờ giả lập MPLAB SIM)
2>Sau lenh RETIF hoặc RET thì chương trình đọc PC từ Stack (TOSL, TOSH, TOSU). Lúc này PC sẽ được phục hồi như ngay tại thời điểm gặp ngắt, hoặc lệnh CALL. Nhưng PCLATH vẫn không bị thay đổi nếu không có lệnh tác động trực tiếp (chẳng hạn MOVWF PCLATH)
3>Thanh ghi PCLATH chỉ có tác dụng khi ta tác động ghi lên thanh ghi PCL, chẳng hạn:
+ với PCLATH=1 thì lệnh MOVWF PCL sẽ làm cho PC=0x100 ( với WREG=0)

Nói túm lại bình thường PC không tham khảo đến thanh ghi PCLATH, chỉ khi có tác động ghi trực tiếp lên thanh ghi PCL thì PC mới tham khảo đến nó. Theo em thấy thì khi sử dụng bảng mới thực sự cần đến thanh ghi PCLATH

Em là Newbie, có sai sót gì thì nhẹ nhàng chỉ bảo em ^^

thay đổi nội dung bởi: thaile, 13-04-2008 lúc 09:51 PM.
thaile vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-04-2008, 05:44 PM   #86
tuanlq14
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 3
:
co thể chạy chương trinh MPLAB ngay trong CCS C không
co thể vừa viết MPLAB và CCS C cung trong CCS C không
tuanlq14 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-04-2008, 08:30 PM   #87
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tuanlq14 View Post
co thể chạy chương trinh MPLAB ngay trong CCS C không
co thể vừa viết MPLAB và CCS C cung trong CCS C không
MPLAB IDE là môi trường phát triển tích hợp, CCS C là một trình biên dịch. Do đó, nói ngược lại thì đúng hơn, nghĩa là có thể nhúng CCS C vào MPLAB IDE.

Bản thân CCS cũng có IDE. Tuy nhiên, IDE của CCS không hỗ trợ các trình biên dịch của Microchip (MPLAB C18, MPLAB C30, MPLAB C32).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-04-2008, 04:36 PM   #88
vodka1505
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 8
:
Code:
;==============================================================================================
;KHOI TAO VI DIEU KHIEN
		TITLE		"TUTORIAL_1"
		PROCESSOR	P16F628A
		INCLUDE		<P16F628A.INC>
		__CONFIG	_CP_OFF&_PWRTE_OFF&_WDT_ON&_HS_OSC
;==============================================================================================
;PHAN DAT BIEN
		ORG			0x20
COUNT1	RES			1
COUNTA	RES			1
COUNTB	RES			1
;==============================================================================================
		ORG			0x0000
		GOTO 		MAIN
		ORG			0x0005
MAIN	
;		MOVLW		0x07			        ;CHUYEN 0000 0111 VAO THANH GHI W
;		MOVWF		CMCON			;TAT THANH GHI SO SANH

		BANKSEL 	TRISB
		CLRF		TRISB

		BANKSEL		PORTB
		CLRF		PORTB
		
LOOP
		MOVLW		B'11111111'		;W = 1111 1111
		MOVWF		PORTB		;SANG CAC LED
		CALL		DELAY			;GOI HAM TAO TRE

		MOVLW		B'00000000'		;W = 0000 0000
		MOVWF		PORTB               ; TAT LED
		CALL		DELAY			;GOI HAM TAO TRE

		MOVLW		B'11111111'		;W = 1111 1111
		MOVWF		PORTB		;
		CALL		DELAY			;GOI HAM TAO TRE

		MOVLW		B'00000000'		;W = 0000 0000
		MOVWF		PORTB
		CALL		DELAY			;GOI HAM TAO TRE
	
		MOVLW		B'11111111'		;W = 1111 1111
		MOVWF		PORTB		;
		CALL		DELAY			;GOI HAM TAO TRE

		MOVLW		B'00000000'		;W = 0000 0000
		MOVWF		PORTB
		CALL		DELAY			;GOI HAM TAO TRE

		MOVLW		B'11111111'		;W = 1111 1111
		MOVWF		PORTB		;
		CALL		DELAY			;GOI HAM TAO TRE

		MOVLW		B'10000000'
		MOVWF		PORTB
LOOP_1
		CALL		DELAY
		BCF			STATUS, C
		RRF			PORTB
		BTFSS		STATUS, C
		GOTO		LOOP_1

		MOVLW		B'00000001'
		MOVWF		PORTB
LOOP_2
		CALL		DELAY
		BCF			STATUS,C
		RLF			PORTB
		BTFSS		STATUS,C
		GOTO		LOOP_2

		MOVLW		B'11000000'
		MOVWF		PORTB
		CALL		DELAY

		MOVLW		B'11100000'
		MOVWF		PORTB
		CALL		DELAY

		MOVLW		B'11110000'
		MOVWF		PORTB
		CALL		DELAY

		MOVLW		B'11111000'
		MOVWF		PORTB
		CALL		DELAY

		MOVLW		B'11111100'
		MOVWF		PORTB
		CALL		DELAY

		MOVLW		B'11111110'
		MOVWF		PORTB
		CALL		DELAY

		MOVLW		B'11111111'
		MOVWF		PORTB
		CALL		DELAY		

		GOTO		LOOP			;GO BACK AND DO IT AGAIN
;==============================================================================================
;CHUONG TRINH CON
;----------------------------------------------------------------------------------------------
DELAY
		MOVLW		D'255'			; 
		MOVWF		COUNT1		;COUNT1 = 255
		MOVLW		d'255'			;
		MOVWF		COUNTA
;		MOVLW		d'51'
;		MOVWF		COUNTB
DELAY_1
		DECFSZ		COUNT1		;COUNT1 = COUNT1 - 1
		GOTO		DELAY_1			;QUAY TRO LAI NHAN DELAY
;		DECFSZ		COUNTA		;COUNTA = COUNTA - 1
;		GOTO		DELAY_1
		DECFSZ		COUNTB
		GOTO		DELAY_1	
		RETURN
GOTO	$
END
- Đoạn chương trình trên của em chạy rất tốt nếu khai báo dùng thạch anh nội của PIC, còn nếu em khai bao như trên ( dùng thạch anh ngoài) thì nó không chạy. cụ thể là các led không nháy, và chân rb4 của nó không có mức tín hiệu cao, mặc dù em đã set nó lên mức cao.
- Anh nào biết nó sai ở chỗ nào chỉ giúp em với. Mạch em dùng thạch anh 10Mhz, tụ gốm 33p.
Cảm ơn các anh nhiếu

thay đổi nội dung bởi: vodka1505, 20-04-2008 lúc 08:50 AM.
vodka1505 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2008, 08:20 AM   #89
vodka1505
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 8
:
không có ai giúp mình sao? đang cần quá.
vodka1505 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2008, 09:05 AM   #90
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Bạn đã khẳng định là chương trình chạy tốt rồi, chỉ có thay đổi thiết lập cấu hình từ bộ dao động nội sang thạch anh ngoài thôi. Như vậy có nhiều khả năng là thạch anh không dao động (đã có bạn gặp trường hợp là chân OSC2 bị hỏng, do đó chỉ dùng được cấu hình clock ngoài, không dùng được cấu hình thạch anh ngoài). Bạn cũng chú ý là bạn đang bật WDT, và trong code không hề có lệnh xóa WDT. Có khả năng là bạn tắt WDT khi chạy bằng bộ dao động nội, và bật WDT khi cấu hình lại để dùng thạch anh ngoài hay không?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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à 04:10 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