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 04-04-2006, 07:36 PM   #1
lamhoang
Đệ tử 2 túi
 
lamhoang's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 27
:
Talking

Trích:
Nguyên văn bởi nhh
Cách thức khởi động timer có khác nhau,timer0 bạn phải chỉ định Pre cho nó bằng lệnh:
Code:
BCF	OPTION_REG,PSA
và điều chỉnh tốc độ bằng việc khởi tạo cho 3 bit PS0,PS1 và PS2 của thanh ghi OPTION_REG.
Timer0 và timer2 là timer 8bit,timer1 là timer 16bit,ngoài chức năng định thì thì timer còn nhiều ứng dụng khác.
Cụ thể bạn xem thêm trong datasheet mấy cái thanh ghi ở phần Timer!

Theo ý nhh để điều chỉnh thời gian như bạn nói bằng nút bấm (ko biết bạn dùng mấy nút?), mình làm như sau :
Với 3 nút bấm chẳng hạn và thời gian ấn nút 1 sẽ delay 1s;nút 2 delay 500ms; nút 3 delay 100ms ,viết mấy cái lệnh kiểm tra xem cái nút nào on thì nhảy đến cái nhãn đó, ấn nút 1 -> nhảy vào Button_1 thì 500+400+100=1000ms=1s,rồi quay ngược về,hai nhãn còn lại cũng tương tự,
Trong phần main mình sẽ đặt những cái nhãn :

Code:
....
Button_1
           Call delay_500ms
Button_2
           Call delay_400ms
Button_2
           Call delay_100ms
.....
Mấy hàm delay này mình tin là bạn viết ok nếu không thì tham khảo tutorial 2 của Chính :
http://www.picvietnam.com/forum//sho...p?t=238&page=2

Ý tưởng là vậy,bạn thử viết và post lên (cả sơ đồ nguyên lí nhé!) để anh em nhà pic cùng phá luôn !
OK! Thank! như vậy là thời điểm chính thức Timer khởi động là ngay sau lệnh
BCF option_reg,PSA
Mình cũng mới viết xong nhưng do không định được thời điểm Timer khởi động nên thời gian delay ko chính xác.
Hình như các bác ở SG và HN hết thì phải . không biết có cao thủ nào ở ĐN không nhỉ. Phải phát triển phong trào sử dụng PIC ở ĐN chứ các bác nhỉ?
lamhoang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-06-2007, 07:00 AM   #2
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Trong hàm init chọn như sau: dùng pre cho timer0 với tỉ lệ 1:2
Code:
void init(void){
	// khoi tao cho các port
	// Khoi tao cho cac thanh ghi	
	OPTION  = 0x00; // dung prescaler cho timer0 voi ti le la 1:2

	// Khoi tao cho ngat Timer0
	GIE = 1; // cho phep ngat toan cuc
	T0IE = 1; // cho phep ngat timer0
	T0IF = 0; // xoa co ngat timer0
	TMR0 = 6; // khoi tao
}
[/QUOTE]

Bác Ngô ơi giúp em với,trong CCS cờ ngắt timer0 là gì vậy? em đọc trong trong thư viện 16f877a.h kô thấy no định nghĩa chỗ này.Em liều lam đại thì nó ko chịu--->em pó tay.Và cái cho phép ngắt toàn cục ko thấy ai nói đến vậy?Và cách tính khoản giá trị nạp ban đầu cho timer?
VD : em muốn tạo ra một xung với tần số là 10Khz o portD.7 .
f=100Khz =>T=1/10=0.1ms=100micro giây. |
chu ky may dai 1 micro s,
==> cần có 50 micro s tương đương với 50 lần đếm lên của timer
==> giá trị cần nạp cho timer la :
256 - 50=206=0xCE
Nếu là 8051 thi ta nạp vào thanh TH0=0xCE ;
Vậy đối với Pic 16f877A cái giá trị đó giờ phải viết vào đâu vậy bác Ngô ?giúp em với.
Các bác có thể chỉ rõ hơn về vấn đề timer này khi dùng CCS ko vậy?
Thanks các bác .
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2006, 09:30 AM   #3
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Code:
;========================================
;Author:		NHH
;Date:		18/03/06
;Hardware:	PIC16F877A 
;		QUARTZ  10MHz
;========================================
	PROCESSOR	PIC16f877A 
	INCLUDE<P16f877A.inc> 
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
	COUNT1 EQU 0x20
	COUNT2 EQU 0x21
	COUNT3 EQU 0x22
	w_temp		EQU	0x71		; variable used for context saving
	status_temp	EQU	0x72		; variable used for context saving
	pclath_temp	EQU	0x73		; variable used for context saving
;===============MAIN PROGRAM===========
	ORG 	0x000
	GOTO 	MAIN
	ORG	0004h
	GOTO	INTERRUPT
;============INTERRUPT PROGRAM=========
INTERRUPT
	movwf w_temp	 ; save off current W register contents
	movf STATUS,w 	; move status register into W register
	movwf status_temp	 ; save off contents of STATUS register
	movf PCLATH,w	 ; move pclath register into w register
	movwf pclath_temp 	; save off contents of PCLATH register
;****************************************
	BCF	INTCON,TMR0IF

	DECFSZ	COUNT1,F
	RETFIE
	MOVLW	d'154'
	MOVWF	COUNT1

	INCF	COUNT2,F
	MOVF	COUNT2,W
	CALL	TABLE
	MOVWF	PORTB

	CALL	CHECK_YELLOW
	CALL	CHECK_GREEN
	CALL	CHECK_RED

	MOVLW	d'10'
	SUBWF	COUNT2,W
	BTFSS	STATUS,0
	RETFIE
	CLRF	COUNT2
	INCF	COUNT3,F
	MOVF	COUNT3,W
	CALL	TABLE
	MOVWF	PORTC

	RETFIE	
;****************************************
	movf pclath_temp,w 		; retrieve copy of PCLATH register
	movwf PCLATH 		; restore pre-isr PCLATH register contents
	movf status_temp,w 		; retrieve copy of STATUS register
	movwf STATUS 		; restore pre-isr STATUS register contents
	swapf w_temp,f
	swapf w_temp,w 		; restore pre-isr W register contents
	retfie 			; return from interrupt
;.............................................................................................
MAIN
	BCF 	STATUS,RP1
	BSF 	STATUS,RP0 		; select BANK 1
	CLRF 	TRISB 			; PORTB,C,D  output
	CLRF 	TRISC
	CLRF 	TRISD
	BSF	OPTION_REG,PS0		;TMR0 rate 1: 64
	BCF	OPTION_REG,PS1
	BSF	OPTION_REG,PS2
	BCF	OPTION_REG,PSA		;Prescaler is assigned to the Timer0 module
	BCF	OPTION_REG,T0CS		;enable TMR0
	BCF 	STATUS,RP0 		;select BANK 0

	BSF	INTCON,GIE
	BSF	INTCON,TMR0IE
	BCF	INTCON,TMR0IF

	MOVLW	d'154'
	MOVWF	COUNT1
	MOVLW	d'1'
	MOVWF	COUNT2
	CLRF	COUNT3
	MOVLW	b'00000110'
	MOVWF	PORTB
	MOVLW	b'00111111'
	MOVWF	PORTC

	MOVLW	b'00000100'
	MOVWF	PORTD
	GOTO	$
;========================================
CHECK_YELLOW
	BTFSS	PORTD,0
	GOTO	$+2
	RETURN
	MOVLW	d'2'
	SUBWF	COUNT3,W
	BTFSS	STATUS,0
	RETURN
	MOVLW	b'00000110'
	MOVWF	PORTD
	RETURN
CHECK_GREEN
	BTFSC	PORTD,0
	GOTO	$+2
	RETURN
	MOVLW	d'2'
	SUBWF	COUNT3,W
	BTFSS	STATUS,0
	RETURN
	GOTO	MAIN
	RETURN
CHECK_RED
	MOVLW	d'3'
	SUBWF	COUNT3,W
	BTFSS	STATUS,0
	RETFIE

	MOVLW	d'1'
	MOVWF	COUNT2
	CLRF	COUNT3
	MOVLW	b'00000110'
	MOVWF	PORTB
	MOVLW	b'00111111'
	MOVWF	PORTC
	MOVLW	b'00000001'
	MOVWF	PORTD
	RETURN	
;-----------------------------------------------------------------------
; Bang tra ve Digital tu 0 den 9 
; Chi so dau truy cap la 0
; Bang o PAGE 0

	ORG 0x90
TABLE
;-----------------------------------------------------------------------
	ADDWF 	PCL, F 			; bat dau tai 0x80
	RETLW 	b'11111111' 		; NO DISPLAY
	RETLW 	b'00000110' 		; 1
	RETLW 	b'01011011' 		; 2
	RETLW 	b'01001111' 		; 3
	RETLW 	b'01100110' 		; 4
	RETLW 	b'01101101' 		; 5
	RETLW 	b'01111101' 		; 6
	RETLW 	b'00000111' 		; 7
	RETLW 	b'01111111' 		; 8
	RETLW 	b'01101111' 		; 9
	RETLW 	b'00111111' 		; 0

	END
File Kèm Theo
File Type: rar Traffic light.rar (22.9 KB, 671 lần tải)
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2011, 08:36 PM   #4
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
gop y ve ct den GT

#include<16f877a.h>
#fuses nowdt,noprotect,nolvp,xt,put
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(d)
#byte portd=0x8
#byte portb=0x6
#byte porta=0x5
#bit a0=porta.0
#bit a1=porta.1
void main()
{signed int x,y,i,chuc,dv;
int a[10]={192,249,164,176,153,146,130,248,128,144};
set_tris_a(0b00);
set_tris_b(0);
set_tris_d(0b000);
denxanh:
x=5;
portd=0b110;
goto loop;
denvang:
x=3;
portd=0b101;
goto loop;
dendo:
x=6;
portd=0b011;
goto loop;
loop:
while(1)
{chuc=x/10;
dv=x%10;
for(i=0;i<50;i++)
{portb=a[chuc];
a0=0;
a1=1;
delay_ms(10);
portb=a[dv];
a1=0;
a0=1;
delay_ms(10);
}x--;
if(x>=0)
goto loop;
else
y=portd;
switch(y)
{case 6:
{goto denvang;
break;}
case 5:
{goto dendo;
break;}
case 3:
{goto denxanh;
break;}}}}
File Kèm Theo
File Type: rar GT.rar (16.0 KB, 17 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2006, 09:33 AM   #5
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Hex file
Code:
:020000040000FA
:020000002728AF
:080008000528F1000308F200D5
:100010000A08F3000B11A00B09009A30A000A10AF6
:1000200021089020860041204B2054200A302102D4
:10003000031C0900A101A20A2208902087000900E0
:1000400073088A0072088300F10E710E0900031311
:100050008316860187018801011481100115811121
:10006000811283128B178B160B119A30A00001306E
:10007000A100A201063086003F30870004308800CE
:100080004028081C4428080002302202031C0800F3
:1000900006308800080008184E28080002302202A6
:1000A000031C08002728080003302202031C090053
:1000B0000130A100A201063086003F3087000130E8
:0400C00088000800AC
:100120008207FF3406345B344F3466346D347D34DB
:0801300007347F346F343F34C3
:02400E00323F3F
:00000001FF
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2006, 09:47 AM   #6
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Các bác xem xét và cho ý kiến,hình như nó vẫn chưa tối ưu.Thiên hạ chắc cũng không ai làm thế này!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 12:06 AM   #7
pb1
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 31
:
PWM cho PIC16f877A

Sử dụng PIC chạy với thạch anh là 4MHz, tần số điều chế độ rộng xung là 1000Hz với duty cycle là 50%
;================================================= ========
1/ thiết lập chu kì PWM (1000Hz=0.001S) bằng cách ghi vào thanh ghi PR2.
Chu kì điều chế độ rộng xung(PWM Period)=(PR2+1)*4*Tosc*TMR2 Prescale value
tỉ lệ TMR2 prescale là 1:4, thì ta có
Tosc=1/4000000=2.5*10-7
ta cũng có
PR2=(Period/(4*Tosc*TMR2 prescale))-1
nên: PR2=(0.001/(4*2.5*10-7*4))-1=249
bằng cách thiết lập như vậy ta có chương trình như sauviết bằng assembler, lần sau sẽ là Hi-Tech PIC)
bsf STATUS,PR0;change from bank 1 to bank 0
movlw d'249'
movwf PR2
bcf STATUS,PR0
;================================================= ========
2/ thiết lập PWM duty cycle bằng cách ghi vào thanh ghi CCPR1L và hai bit 5 và 4 của thanh ghi CCP1CON.
ta có công thức sau:
PWM duty cycle= (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2 Prescale value
nên suy ra: CCPR1L:CCP1CON<5:4>=PWM duty cycle/(Tosc*TMR2 prescale)
PWM duty cycle=50% của chu kỳ
PWM duty cycle=50%*0.001=0.0005
CCPR1L:CCP1CON<5:4>=0.0005/(2.5*10-7*4)
CCPR1L:CCP1CON<5:4>=500
Số 500 trong số nhị phân viết là:0111110100
vậy:CCPR1L=01111101 và CCP1CON<5:4>=00
do đó, ta có chương trình sau:
movlw b'01111101'
movwf CCPR1L
bcf CCP1CON,CCP1X;set bit 1
bcf CCP1CON,CCP1Y;set bit 0
;================================================= ========
3/thiết lập chân CCP1 là một lối ra bằng cách xóa bit TRISC<2>
bsf STATUS,PR0
movlw b'11111011'
andwf TRISC
bcf STATUS,PR0

;================================================= ========
4/thiết lập giá trị prescale TMR2 và cho phép TMR2 bằng cách ghi vào T2CON(thanh ghi điều khiển Timer2)
Ta đã sử dụng từ trước là thiết lập giá trị prescale là 1:4.
Prescale TMR2 là các bit 1 và 0 trong thanh ghi T2CON
Để cho phép TMR2 là bit số 2.
Ta có đoạn chương trình như sau:
movlw b'00000101' ;Timer2 on,prescale=1:4
movwf T2CON
;================================================= ========
5/Thiết lập CCP1 ở chế độ điều chế độ điều chế độ rộng xung (PWM module)
movf CCP1CON,W
andlw b'00110000'
iorlw b'00001111';cho phép module PWM
movwf CCP1CON
;================================================= ========
thế đã nhỉ, mệt quá, đi ngủ thôi

Đã lâu không viết băng assembler, hôm nay tiện làm về điều khiển động cơ, thế là hứng lên viết mấy dòng, có lẽ có nhiều thếu sot, mong các bác góp ý cho em

Khi nào em làm xong về điều khiển động cơ thì em sẽ port các sch lên diễn đàn cho cả nhà xem, rất mong cả nhà góp ý


thân!
pb1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 07:31 AM   #8
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
Các bài viết trong luồng này rất hay, các bạn đang thảo luận về PWM, có thể nhấn thêm một bước bây giờ giả sử khi kết hợp 2 chân PWM nhưng làm xung trên 2 chân xen kẽ với nhau xem nào?

Đây có thể chỉ là một bài tập vui nhưng cũng có ứng dụng nhiều đấy.

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 22-03-2006, 05:44 PM   #9
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi falleaf
Các bài viết trong luồng này rất hay, các bạn đang thảo luận về PWM, có thể nhấn thêm một bước bây giờ giả sử khi kết hợp 2 chân PWM nhưng làm xung trên 2 chân xen kẽ với nhau xem nào?

Đây có thể chỉ là một bài tập vui nhưng cũng có ứng dụng nhiều đấy.

Chúc vui.
Mình dùng ngắt để xử lý có được không anh F!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 09:50 AM   #10
pb1
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 31
:
hì, thế còn capture module thì sao nhỉ, có ai viết tiếp không?
pb1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 11:20 AM   #11
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Mình có một vài ý kiến về cách thiết kế mạch đèn giao thông của nhh như thế này:

Tất nhiên là chọn PORT điều khiển như thế nào cũng được, nhưng theo mình, khi thiết kế một ứng dụng, cần tìm cách để thiết kế là tối ưu.

Do PIC16F877A được tích hợp khá nhiều chức năng ngoài chức năng I/O thông thường, nên việc lựa chọn PORT điều khiển cũng nên cân nhắc. MÌnh nêu lên một số điểm như sau:

PORT C của PIC16F877A ngoài chức năng I/O là các chức năng CCP và giao tiếp nối tiếp (SPI, I2C,... ). Nếu nhh chọn PORT này làm PORT điều khiển các chân a-g của các LED thì các chức năng on-chip nêu trên sẽ không tương tác được nữa.

PORT D ngoài chức năng I/O là chức năng PSP (Parallel Slave Port). Chức năng giao tiếp này ít được sử dụng do số lượng chân cần cho giao tiếp khá lớn (8 chân PORT D và 3 chân PORT E), nhưng nhh đã sử dụng 3 chân để bật đèn giao thông. Như vậy chức năng này cũng bị mất luôn.

Có thể nói ta đã phí phạm 3 chức năng on-chip của PIC16F877A. Tất nhiên là trong ứng dụng của nhh ta chưa cần quan tâm đến vấn đề này, nhưng mình cũng muốn nêu lên để anh em cùng thảo luận.

Theo mình thì nên sửa lại như thế này:

Các chân data của Led 7 đoạn, mình sẽ đưa vào PORT D.
Các chân điều khiển đèn giao thông và quét LED sẽ đưa vào PORT B luôn.

Như vậy ta có thể tiết kiệm được các chức năng CCP và giao tiếp ở PORT C, cái mất đi chỉ là cái ít đụng tơi PSP, còn ngắt PORT B thì vẫn còn vài chân.

Trong các ứng dụng của mình có dính tới LED 7 đoạn, mình cũng bố trí các chân điều khiển như vậy.

Về chương trình cũng sẽ không có thay đổi lớn. Bạn nên "#define ..." các chân và PORT điều khiển. Như vậy khi cần thay đổi chân điều khiển, ta chỉ cần thay đổi cái phần define mà không cần phải sửa lại trong toàn bộ chương trình. Hơn nữa chương trình khi đọc cũng sẽ thân thiện và dễ hiểu hơn.

Một vài ý kiến góp vui như vậy. Anh em thấy thế nào.

__________________


thay đổi nội dung bởi: ntc, 20-03-2006 lúc 11:24 AM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 12:06 PM   #12
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Tiếc quá nhh không làm cái Timer. Nếu làm cái Timer, bạn sẽ có thêm một kinh nghiệm sương máu và một thủ thuật kinh điển khi lập trình bằng ASM. Cái kinh nghiệm này mĩnh cũng chỉ vừa mới rút ra thôi. .

Nó có liên quan tới kĩ thuật bảng.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 06:19 PM   #13
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi ntc
Tiếc quá nhh không làm cái Timer. Nếu làm cái Timer, bạn sẽ có thêm một kinh nghiệm sương máu và một thủ thuật kinh điển khi lập trình bằng ASM. Cái kinh nghiệm này mĩnh cũng chỉ vừa mới rút ra thôi. .

Nó có liên quan tới kĩ thuật bảng.
Tuần này tớ sẽ làm cái timer để Chính phân tích những kinh nghiệm xương máu mà mình tích lũy được.
Hy vọng sớm hoàn thành!

Chào!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 02:59 PM   #14
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chương trình đèn giao thông tại sao bạn NHN lại tốn nhiều chân để điều khiển 2 led 7 thanh thế nhỉ? Sao bạn không dùng phương pháp quét led để quét 2 led này. Khi đó dùng 7 chânPORTD (a->g) và thêm 2 chân điều khiển nữa như vậy chỉ mất có 9 chân tất cả. Như vậy tiết kiệm các chân hơn.

Thực tế đèn giao thông này là rất đơn giản. Bạn có thể phát triển thành sơ đồ đền giao thông hiện đại mới trong thực tế không? Đứng ở ngã tư một lúc xem thế nào . Bạn đưa ra mô hình đi mình lập trình bằng HTPIC xem thế nào. Vì làm bằng ASM đúng là mình mệt lắm.

chúc mọi người thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 05:56 PM   #15
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Cảm ơn ngohaibac!

Ban đầu mình cũng nghĩ ghép chung dữ liệu cho hai led 7 seg,làm như vậy thì khi viết chương trình quét led có hơi phức tạp hơn một chút.Chương trình này mình dùng để tìm hiểu ngắt timer0 thôi chứ ko có ý định tiết kiệm chân VDK.

ngohaibac cứ mắc mạch như ntc:

Trích:
Theo mình thì nên sửa lại như thế này:

Các chân data của Led 7 đoạn, mình sẽ đưa vào PORT D.
Các chân điều khiển đèn giao thông và quét LED sẽ đưa vào PORT B luôn.
Bạn viết và post lên cho anh em học HTPIC tham khảo!

Chào!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: nhh, 20-03-2006 lúc 06:26 PM.
nhh 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
Pic16f877a TỪ DỄ TỚi KhÓ ntc Cơ bản về vi điều khiển và PIC 373 23-05-2009 10:24 PM
CCS C for PIC16F877A nhh Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 405 24-04-2008 12:00 PM


Múi giờ GMT. Hiện tại là 12:32 PM.


Đượ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