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
-
Bạn nên xem lại quy trình làm việc với ADC nhé!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
-
sao không ai giúp anh_gioi thế này?Mình cũng mới học thôi nhưng theo mình lỗi này bạn phải viết hoa cái chữ P theo mình là thế!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
-
Hic ! mình cũng ko hiểu câu hỏi của bạn có ý gì nữa !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
-
Ờ thế thì khi bạn tạo xung bằng VDK thì bạn làm thế nào? Trừ khi bạn dùng xung tần số 12M từ thạch anh....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
-
Bạn dùng Win98 phải không?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 Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -
... gay go quá.

Comment