Nguyên văn bởi nhanh0112
Xem bài viết
Thông báo
Collapse
No announcement yet.
HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]
Collapse
X
-
Các bac ơi giúp tui chút! Tui phải làm cái khống chế nhiệt độ rùi hiển thị trên máy tính, làm mọi thứ rùi nhưng còn đoạn giao tiếp với ADC0804 thì không chạy...Dưới đây là đoạn CODE của tui (Chắc sai roài):
...
void DOC_ADC(void) {
WRITE=0;
delay(10);
WRITE=1;
while(INT);
READ=1;
delay(10);
READ=0;
x=P2;
}
Các chân WRITE,READ,INT là các chân điều khiển, delay là hàm trễ.
Vậy thôi, mọi người giúp tôi nha.CAM ƠN!●█═██▄▄▄▄▄▄▄▄▄
▄▅██████▅▄▃▂
████████████████
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤
Comment
-
Nguyên văn bởi luulinh Xem bài viếtCác bac ơi giúp tui chút! Tui phải làm cái khống chế nhiệt độ rùi hiển thị trên máy tính, làm mọi thứ rùi nhưng còn đoạn giao tiếp với ADC0804 thì không chạy...Dưới đây là đoạn CODE của tui (Chắc sai roài):
...
void DOC_ADC(void) {
WRITE=0;
delay(10);
WRITE=1;
while(INT);
READ=1;
delay(10);
READ=0;
x=P2;
}
Các chân WRITE,READ,INT là các chân điều khiển, delay là hàm trễ.
Vậy thôi, mọi người giúp tôi nha.CAM ƠN!
Đây là đoạn mã mẫu có chú thích kỹ lắm rồi đấy!
Lưu ý một chút ở đây nó không dùng nguồn tạo dao động ngoài cho ADC mà dùng 1 chân của VDK để phát xung clock cho ADC luôn, chân AD_CLK (P1.6)!
Code:; +--------------------=-=-=-=-=-=-=-=-=-=-=-----------------+ ; | Project: ADC0808 Evaluation | ; -=| Microcontroller: ATMEL AT89s8252 at 11.0592MHz v1.2 |=- ; | Programmer: Bruno Marcio Diogo Venancio | ; | Start date:01/18/2004 | ; | Email: bruno.marcio@bol.com.br 5:45am | ; | Brazil | ; +--------------------=-=-=-=-=-=-=-=-=-=-=-----------------+ ;-------| EQUATES |----------------------------------------------- ;=============| I/O |====================================== ; ====| ADC0808's Equates |========================== AD_OE BIT P1.5 ; Output enable AD_SC BIT P1.7 ; Start conversion AD_EOC BIT P1.4 ; End of conversion AD_ALE BIT P1.7 ; address lacth enable AD_CLK BIT P1.6 ; clock AD0 BIT P3.2 ; mutiplexer channel addressing AD1 BIT P3.3 AD2 BIT P3.4 CONV_PORT EQU P2 VAR1 DATA 60H VAR2 DATA 61H ORG 0 jmp MAIN MAIN: ;--INITIALIZE A/D clr AD_OE clr AD_ALE clr AD_CLK ;-- CONVERSION: clr AD0 ; Set A/D multiplexer channel0 clr AD1 clr AD2 call START_CONV ; A/D conversion routine jmp CONVERSION ;-------------------------=| SUBROUTINES |=------------------------------ ; +--------------------------------------------+ ; | ADC0808 conversion routine | ; | output: A | ; | input : multiplexer channel on ad0,ad1,ad2 | ; | PIN | ; | AD2 AD1 AD0 ANALOG INPUT | ; | 0 0 0 1 | ; | 0 0 1 2 | ; | 0 1 0 3 | ; | 0 1 1 4 | ; | 1 0 0 5 | ; | 1 0 1 6 | ; | 1 1 0 7 | ; | 1 1 1 8 | ; +--------------------------------------------+ START_CONV: mov CONV_PORT,#0FFH clr AD_OE ; hi Z output setb AD_ALE ; start converter (SET both SC and ALE) clr AD_ALE START_CLK: cpl AD_CLK jnb AD_EOC,START_CLK setb AD_OE mov P0, CONV_PORT call Delay_1s clr AD_OE ret Delay_1s: TT0: MOV R3,#8 MOV R2,#8 MOV R1,#236 TT1: DJNZ R1,TT1 DJNZ R2,TT1 DJNZ R3,TT1 RET END
Comment
-
Cám ơn bạn, có điều tui mới học VDK, thấy lập trình bằng C ngắn và dễ hơn nhiều nên không học ASM... nói chung không hiểu chương trình của bạn lắm. Mà bạn cho hỏi chút xung cấp cho ADC là khoảng 500KHz(ADC080x) mà tạo bằng chân P1.6, nếu như thạch anh là 12M thì tần số hoạt động của chip là 1 M nghĩa là cứ 2 chu kì thì phải đảo mức trên chân này --> lấy gì cho VDK hoạt động?(Người mới<-- Dốt nên hỏi)
à mà cái đoạn CODE của tui có sai không vậy?●█═██▄▄▄▄▄▄▄▄▄
▄▅██████▅▄▃▂
████████████████
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤
Comment
-
Nguyên văn bởi anh_gioixin loi!minh moi bat dau hoc 8051 lap trinh bang keil .co le cau hoi nay da nham chan voi cac cau rui ,nhung minh cung ko hieu lam ve loi nay .mọi người đã giải thích rùi nhưng mình ko hiểu cho lắm.mong mọi người giải thích lại hộ cho.
xin cảm ơn!Khó nhất trên đời làm trang nam tử
Ý chí vững vàng mà tình cảm lại mênh mang
Comment
-
Nguyên văn bởi luulinh Xem bài viếtMà bạn cho hỏi chút xung cấp cho ADC là khoảng 500KHz(ADC080x) mà tạo bằng chân P1.6, nếu như thạch anh là 12M thì tần số hoạt động của chip là 1 M nghĩa là cứ 2 chu kì thì phải đảo mức trên chân này --> lấy gì cho VDK hoạt động?(Người mới<-- Dốt nên hỏi)
à mà cái đoạn CODE của tui có sai không vậy?
VĐK dùng xung ngoài từ thạch anh, việc đưa ra xung các chân thì có liên quan gì đến việc VĐK có hoạt động được hay ko đâu nhỉ !------
Qrio' qrio` qrioooooo!!!!>:D<
Comment
-
Nguyên văn bởi qrio Xem bài viếtHic ! mình cũng ko hiểu câu hỏi của bạn có ý gì nữa !
VĐK dùng xung ngoài từ thạch anh, việc đưa ra xung các chân thì có liên quan gì đến việc VĐK có hoạt động được hay ko đâu nhỉ !●█═██▄▄▄▄▄▄▄▄▄
▄▅██████▅▄▃▂
████████████████
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤
Comment
-
cách dịch chương trình assembly ra file hex
Happy New Year ! 2007 !
Các bác ơi cho em hỏi chút: cách dịch chương trình assembly ra file hex bàng keil c như thế nào ?
có giống với cách dịch chương trìng c ra file hẽ không (chỉ khác thay đuôi *c bằng cách thay đuôi *a)
chúc mừng năm mới
Comment
-
Đúng rùi đó bạn.
Bạn làm với file .asm tượng tự như với file .c thôi. Khi save file vào bạn chọn đuôi là .asm là xong.
Chúc bạn thành công.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
Mình gửi các bạn một vài file mà mình đã upload từ ngày xưa:
Keil C Appnote (32.62 MB)
Keil C Debuger (34.64 MB)
Keil C Simulate(28.72 MB)
Mình vừa update lại link. Các bạn mở link đó ra trên một cửa sổ rùi sau đó nhìn thấy chữ Download link gần cuối rùi kích vào link để download nhé.
Chúc các bạn thành công.Last edited by ngohaibac; 16-03-2007, 22:51.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
. Chắc là mấy tháng trước thôi em ạ. Em vui tính quá.
Đây là bản: Keil C 8.05 (Full Version)
Và tài liệu C51 Primer
Chúc các bạn thành công.Last edited by ngohaibac; 16-03-2007, 22:53.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
Nguyên văn bởi phuongcn Xem bài viếtsao toi lam mai ko dc ban nhi?
kho hieu ghe tai sao ma no cu bao loi : Build target 'Target 1'
compiling thu3.c...
--- Error: can't execute 'C:\Keil\C51\BIN\C51.EXE'
Target not created
thế là sao nhỉ?!AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
Xem thêm tại Online Store ---> Click here
Mob: 0982.083.106
Comment
-
Các anh ơi giúp em với
Không hiểu sao đoạn chương trình này của em bị lỗi rất vô lý.Ngắt ngoài của em thực hiện việc đổi trạng thái chân 3 hoặc chân 1 của VDK.Nhưng khi chạy mô phỏng và thực hiện hàm bấm fím thì các chân 3 và 1 cũng bị đổi trạng thái y như là ngắt ngoài bị kích hoạt.Còn nữa,nếu em cho hàm send_string (gửi 1 chuỗi kí tự) vào hàm ngắt ngoài thì chương trình quét phím bị dừng sau khi ấn một lần duy nhất.Mong các anh xem hộ em với.Đây là code:Code:/*************************************************************************************************/ //Project Scan keyboard 4x4 //Author Duong Ngoc Lam //e_mail realtimebk@yahoo.com //Hanoi University of Technology //------------------------------------------------------------------------------------------------- // Circuit Diagram // // | | | | // ___0___|___1___|___2___|___3___|___________________ P3.0 // | | | | _________________ P3.1 // ___4___|___5___|___6___|___7___|_| _______________ P3.2 // | | | | | _____________ P3.3 // ___8___|___9___|___A___|___B___|___| | ___________ P3.4 // | | | | | | _________ P3.5 // ___C___|___D___|___E___|___F___|_____| | | _______ P3.6 // | | | |_______| | | _____ P3.7 // | | |_________________| | | // | |___________________________| | // |_____________________________________| // // //Have fun. /*************************************************************************************************/ #include <AT89x52.h> #include<stdio.h> sbit COLUMN1_PIN = P2^7;//cot 1 sbit COLUMN2_PIN = P2^6;//cot2 sbit COLUMN3_PIN = P2^5;//cot3 sbit COLUMN4_PIN = P2^4;//cot4 sbit ROW1_PIN = P2^0;//hang1 sbit ROW2_PIN = P2^1;//hang2 sbit ROW3_PIN = P2^2;//hang3 sbit ROW4_PIN = P2^3;//hang4 sbit chan0=P1^0; sbit chan1=P1^1; sbit chan2=P1^2; sbit chan3=P1^3; sbit chan4=P1^4; sbit chan5=P1^5; sbit chan6=P1^6; sbit chan7=P1^7; sbit chan8=P3^0; sbit chan9=P3^1; sbit chan10=P3^2; sbit chan11=P3^3; sbit chan12=P3^4; sbit chan13=P3^5; sbit chan14=P3^6; sbit chan15=P3^7; char m = 0; char array[3]; unsigned char KeyData=0 ; // A B C D E F unsigned char KEYCODE[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//mang tinh gom cac phan tu co dinh //duoc cho nhu sau KEYCODE[0]=0;KEYCODE[1]=1..... //-------------------------Mo dun cua Minh-------------------------------------------------------------- int i; unsigned long so; int flag=0; void serial_init() { SCON = 0x50; TMOD = 0x21; TCON = 0; TH1 = 0xF4; TH1 = 0xF4; TR1 = 1; IE = 0x95; IT0=1; IT1=1; } //-------------------------------------------------------------------------------------------------------------- void delay_ms (long ms ) { long i,j; for (i = 1; i<=500 ; i++) for (j = 1; j<= ms ;j++); } //-------------------------------------------------------------------------------------------------------------- void send_string(unsigned char *k){ while(*k!=0x0){ SBUF=*k; while(!TI){}; TI=0; k++; } } void ngatngoai0 () interrupt 0 { chan3=~chan3;//send_string("nguyen huu thang"); } void ngatngoai1 () interrupt 2 { chan1=~chan1; } void serialint() interrupt 4 using 2 { if(RI){ array[m] = SBUF; m++; if ( m == 3 ) { if ((array[0]=='S') && (array[1]=='W') && (array[2]=='1')) {chan2=1;chan3=1;send_string("SW1");} if ((array[0]=='S') && (array[1]=='W') && (array[2]=='0')){ chan2=0;chan3=0;send_string("SW0");} if ((array[0]=='D') && (array[1]=='E') && (array[2]=='V')){send_string("RDLAB-VIDEOPHONE");} m = 0; } RI = 0; } } unsigned char ScanKeyBoard (void)//chuong trinh quet ban phim { unsigned char keytemp; //Cho tung cot bang khong, quet tung hang` //dau tien cho cot dau nhan gia tri 0.Cac cot con lai nhan gia tri 1 COLUMN1_PIN = 0; //quet dong thu nhut//cho ca cot 1 co bit =0 COLUMN2_PIN = 1; // cac cot con lai giu bit la 1 COLUMN3_PIN = 1; COLUMN4_PIN = 1; keytemp = ~(P2) & 0x0F; //P3.0 ~ P3.3 switch (keytemp)//cau lenh lua chon cho phep bit duoc phim bam nao { case 1: KeyData = KEYCODE[0];//phim 0 break; case 2: KeyData = KEYCODE[1];//phim 1 break; case 4: KeyData = KEYCODE[2];//phim 2 break; case 8: KeyData = KEYCODE[3];//phim 3 break; default : break; } // delay_ms(2); //-------------------------------------------------------------------------------------- COLUMN1_PIN = 1; COLUMN2_PIN = 0; //quet dong thu nhi COLUMN3_PIN = 1; COLUMN4_PIN = 1; keytemp = ~(P2) & 0x0F; //P3.0 ~ P3.3 switch (keytemp) { case 1: KeyData = KEYCODE[12]; break; case 2: KeyData = KEYCODE[13]; break; case 4: KeyData = KEYCODE[14]; break; case 8: KeyData = KEYCODE[15]; break; default : break; } // delay_ms(1); //-------------------------------------------------------------------------------------- COLUMN1_PIN = 1; COLUMN2_PIN = 1; COLUMN3_PIN = 0; //quet dong thu ba COLUMN4_PIN = 1; keytemp = ~(P2) & 0x0F; //P3.0 ~ P3.3 switch (keytemp) { case 1: KeyData = KEYCODE[8]; break; case 2: KeyData = KEYCODE[9]; break; case 4: KeyData = KEYCODE[10]; break; case 8: KeyData = KEYCODE[11]; break; default : break; } // delay_ms(1); //-------------------------------------------------------------------------------------- COLUMN1_PIN = 1; COLUMN2_PIN = 1; COLUMN3_PIN = 1; COLUMN4_PIN = 0; //quet dong thu tu keytemp = ~(P2) & 0x0F; //P3.0 ~ P3.3 switch (keytemp) { case 1: KeyData = KEYCODE[4]; break; case 2: KeyData = KEYCODE[5]; break; case 4: KeyData = KEYCODE[6]; break; case 8: KeyData = KEYCODE[7]; break; default : break; } // delay_ms(1); return KeyData; } //-------------------------------------------------------------------------------------------------------------- //main void main (void) { unsigned char kitu; chan4 = 0; serial_init(); //cac hang lam dau vao ROW1_PIN = 1; ROW2_PIN = 1; ROW3_PIN = 1; ROW4_PIN = 1; //display //Vong lap de lay ki tu while(1){ //for(;;) {kitu = ScanKeyBoard();if ( (kitu==1)||(kitu==2)||(kitu==3)||(kitu==4)||(kitu==13)||(kitu==14)||(kitu==15)||(kitu==16)||(kitu==9)||(kitu==10)||(kitu==11)||(kitu==12)||(kitu==5)||(kitu==6)||(kitu==7)||(kitu==8)) break;} //-------------------------Nhan tin hieu tu Vb--------------------------- kitu = ScanKeyBoard(); //----------------------quay so----------------------------------------- /***********************Cot 1********************************/ if (kitu==1) {delay_ms(3); send_string("1"); chan1=0; goto nhan; } if (kitu==2) { delay_ms(3); send_string("4"); chan1=1; goto nhan; } if( kitu==3) { delay_ms(3); send_string("8");goto nhan; } if (kitu==4) {delay_ms(3); send_string("*");goto nhan; } /*************************Cot 2*************************************/ if (kitu==13) {delay_ms(3); send_string("2");goto nhan; } if (kitu==14) {delay_ms(3); send_string("5");goto nhan; } if (kitu==15) {delay_ms(3); send_string("8");goto nhan; } if (kitu==16) {delay_ms(3); send_string("0");goto nhan; } /***************************Cot 3*************************************/ if (kitu==9) {delay_ms(3); send_string("3");goto nhan; } if (kitu==10) {delay_ms(3); send_string("6");goto nhan; } if (kitu==11) {delay_ms(3); send_string("9");goto nhan; } if (kitu==12) {delay_ms(3); send_string("#");goto nhan; } /*******************************Cot 4***********************************/ if (kitu==5) {delay_ms(3); send_string("A");goto nhan; } if (kitu==6) {delay_ms(3); send_string("B");goto nhan; } if (kitu==7) {delay_ms(3); send_string("C");goto nhan; } if (kitu==8) {delay_ms(3); send_string("D");goto nhan; } nhan:kitu=0; } }
|
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment