Nguyên văn bởi vodienDT4
Xem bài viết
Thông báo
Collapse
No announcement yet.
Dành cho người mới tìm hiểu 8051
Collapse
X
-
Nguyên văn bởi vo_cam Xem bài viếtREADY: SETB BUSY ;P1.7: CHON LAM BIT KIEM TRA CO BUSY
CLR RS ;RS = 0: LENH
SETB RW ;R/W = 1:CHON CHUC NANG DOC TU LCD
BACK: CLR E ;EN = 0 - > TAO CANH LEN
SETB E ;EN = 1
JB BUSY,BACK ; Nhảy về lable back nếu busy vẫn =1
NOP ;CHO DEN KHI CO BUSY = 0,KHONG BUSY
RET
code đã chạy với lcd 2 dòng
nếu dùng C bạn chuyển các câu lệnh trên sang ngôn ngữ C!
Chúc thành công!
Bảng mã lệnh của LCD
Mã (HEX) Lệnh đến thanh ghi của LCD
01 Xoá màn hình hiển thị
02 Trở về đầu dòng
04 Giảm con trỏ(dịch con trỏ sang trái )
06 Tăng con trỏ(dịch con trỏ sang phải)
05 Dịch hiển thị sang phải
07 Dịch hiển thị sang trái
08 Tắt con trỏ, tắt hiển thị
0a Tắt hiển thị, bật con trỏ
0c Bật hiển thi, tắt con trỏ
0e Bật hiển thị, nhấp nháy con trỏ
0f Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
1c Dịch toàn bộ hiển thị sang phải
80 Ép con trỏ về đầu dòng thứ nhất
0c0 Ép con trỏ về đầu dòng thứ 2
38 Hai dòng và ma tận 5x7.
Chương trình
/*=========bo tien xu li===============*/
#include<AT89x51.h>
#include<string.h>
/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = P3^0; // chon thanh ghi
sbit RW = P3^1; // doc/ghi
sbit EN = P3^2; //cho phep chot du lieu
/*===========cac chuong trinh con cua LCD==========*/
/*--------------kiem tra su san sang cua LCD------------------------*/
void wait(void)
{
RS=0; //chon thanh ghi lenh
RW=1; //đoc tu LCD
LCDdata=0xff; //gia tri 0xff
while(BF) //kiem tra co ban
{
EN=0; //dua xung cao xuong thap đe chot.
EN=1; //dua chan cho phep len cao
}
}
/*------------------------thiet lap lenh cho LCD--------------------------*/
void LCDcontrol(unsigned char x)
{
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//đoi LCD san sang.
}
/*------------------------------Khoi tao LCD-------------------------*/
void LCDinit(void)
{
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh, bat con tro
LCDcontrol(0x01);//xoa man hinh
}
/*-------------------------thiet lap du lieu cho LCD-----------------*/
void LCDwrite(unsigned char c)
{
RS=1;//ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//cho
}
void LCDwrites(unsigned char *s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++){
LCDwrite(*(s+count));
}
}
/*========================ham chinh==================*/
void main(void)
{
LCDinit(); // khoi tao LCD
LCDcontrol(0x80);// dua con tro ve dau dong 1
LCDwrites("VU XUAN LOI");
LCDcontrol(0xC0);
LCDwrites("VI DIEU KHIEN");
while(1); //vong lap vo han
}Last edited by vuxuanloi; 13-10-2009, 16:16.Vũ xuân Lợi
YM!:
Comment
-
Giup e voi! hic
Em dang lam do an mon vie dieu khien dung 8051, em thi dung 89s52, adc0804, voi dien ap tham chieu Vef/2 la 2.5V,lam mach do dien ap voi cac dai dien ap tu 0-5V, 0-25V, 0-50V, em lam thi da chay ngon nhung gap mot van de. vi du khi em do dai dien ap 0-5V, ADC0804 se nhan biet duoc gia tri dien ap nho nhat la 20mV, e thay led7thanh cua e nhap nhay rat mach o vi tri hang chuc mV, con khi e do dai dien ap 0-25V thi vi tri hang tram mV nhay, nhin vao, e thay chan, e muon mach cua e that tot, led khong bi nhay, e khong biet phai lam the nao. Mong moi nguoi giuap do e, e xin cam on
http://www.mediafire.com/?l2zjn5mwt0t
Comment
-
Nguyên văn bởi talaai_89 Xem bài viếtGiup e voi! hic
Em dang lam do an mon vie dieu khien dung 8051, em thi dung 89s52, adc0804, voi dien ap tham chieu Vef/2 la 2.5V,lam mach do dien ap voi cac dai dien ap tu 0-5V, 0-25V, 0-50V, em lam thi da chay ngon nhung gap mot van de. vi du khi em do dai dien ap 0-5V, ADC0804 se nhan biet duoc gia tri dien ap nho nhat la 20mV, e thay led7thanh cua e nhap nhay rat mach o vi tri hang chuc mV, con khi e do dai dien ap 0-25V thi vi tri hang tram mV nhay, nhin vao, e thay chan, e muon mach cua e that tot, led khong bi nhay, e khong biet phai lam the nao. Mong moi nguoi giuap do e, e xin cam on
http://www.mediafire.com/?l2zjn5mwt0t
nhấp nháy ở đây là: giá trị của nó bị nhảy hay cụ thể như thế nào!?
bạn cần nói cụ thể hơn! và post code cùng mạch nên để mọi người cùng giúp đỡ !0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
||
PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK
Comment
-
vang, e da lam mach cu the, con so bi nhap nhay, chi o 1 vi tri thoi,do la gia tri bi nhay, khong phai tat ca cac chu so deu nhay,khi do o dai 0-5V thi chu so hang chuc mV bi nhay,m khi do o dai 0-25 va 0-50 thi chu so o hang tram mV bi nhay,mong moi nguoi giup do e, e xin cam on.Day la mach va code cua e, mong moi nguoi gop y
http://www.mediafire.com/?sharekey=0...01da0f25e869f4
Comment
-
Nguyên văn bởi talaai_89 Xem bài viếtvang, e da lam mach cu the, con so bi nhap nhay, chi o 1 vi tri thoi,do la gia tri bi nhay, khong phai tat ca cac chu so deu nhay,khi do o dai 0-5V thi chu so hang chuc mV bi nhay,m khi do o dai 0-25 va 0-50 thi chu so o hang tram mV bi nhay,mong moi nguoi giup do e, e xin cam on.Day la mach va code cua e, mong moi nguoi gop y
http://www.mediafire.com/?sharekey=0...01da0f25e869f4
yahoo: vodanhkithuat860945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
||
PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK
Comment
-
Nguyên văn bởi quynh Xem bài viếtĐây là quyển sách khá hay về lạp trinh C cho 8051.
Tui up mãi lên đây ko được.Bạn nào cần thì liên hệ với mình nhé.Quyển này viết bằng tiếng anh, khá cơ bản.Dung lượng gần 5MB
Thanks!Bki4u-University of Technology!
Comment
-
Các bác giải thích giùm hoạt động của times để làm chương trình Delay, thêo mình hiểu thi delay là làm đi làm lại một vấn đề, nhưng mình đọc hoài vẫn không hiểu nó hoạt động ra sao hết, từng lệnh thì hiểu nhưng cấu trúc chung thì ko rõ . Ngoài cách dùng times để làm delay, thì còn nhưng cách nào làm delay nữa không các bác có thể gợi ý một vài chưong trình he!
Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
DELAY:
MOV TMOD,#01H ; chọn time 0 che do 16 bit
MOV TL0,#LOW(-250) ; byte thấp
MOV TH0,#HIGH(-250); byte cao
SETB TR0 ; đặt
JNB TF0,$; hiển thi co TF0
CLR TF0 ; xóa TF0
CLR TR0 ; xóa TF0
RETLast edited by se7enlove_3w; 20-10-2009, 11:06.
Comment
-
Nguyên văn bởi se7enlove_3w Xem bài viếtCác bác giải thích giùm hoạt động của times để làm chương trình Delay, thêo mình hiểu thi delay là làm đi làm lại một vấn đề, nhưng mình đọc hoài vẫn không hiểu nó hoạt động ra sao hết, từng lệnh thì hiểu nhưng cấu trúc chung thì ko rõ . Ngoài cách dùng times để làm delay, thì còn nhưng cách nào làm delay nữa không các bác có thể gợi ý một vài chưong trình he!
Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
DELAY:
MOV TMOD,#01H ; chọn time 0 che do 16 bit
MOV TL0,#LOW(-250) ; byte thấp
MOV TH0,#HIGH(-250); byte cao
SETB TR0 ; đặt
JNB TF0,$; hiển thi co TF0
CLR TF0 ; xóa TF0
CLR TR0 ; xóa TF0
RET
Thực ra delay chỉ là để làm chậm lại thời gian xử lí 1 công việc mà con vxl đang đảm nhiệm, vì tốc độ of vxl rất nhanh nên nếu ko có delay, thì các hệ thống sẽ làm việc rất nhanh => ko đáp ứng được yêu cầu thực tế. Giả sử như bạn cho nhấp nháy 1 con led, nếu ko dùng delay, chắc chắn bạn ko thể nhìn thấy nó nhấp nháy được.
Việc tạo hàm delay, thường nếu ko cần chính xác lắm thì người ta dùng các vòng lặp, trong vòng lặp, con vxl ko làm gì cả, chỉ chạy cho hết vòng lặp thì thôi. Còn nếu cần chính xác (cỡ us) thì bạn có thể dùng timer. Chương trình trên của bạn là 1 ví dụ. Timer là 1 bộ đếm lên, như chương trình trên của bạn thì bạn đã thiết đặt chế độ 16bit cho timer, mỗi khi timer đếm đến FFFF thì nó dừng và cờ tràn TF (Timer Flag) được được đặt bằng 1.
Khi timer đang đếm, cái lệnh JNB TF0,$ làm nhiệm vụ khi nào TF0 = 0 thì con vxl ko làm gì cả, còn khi TF0 = 1 thì con vxl mới thoát khỏi delay và tiếp tục chương trình. Bạn đặt giá trị cho bộ đếm là -250, có nghĩa là hàm này sẽ tạo độ trễ khoảng 250us (với tần số thạch anh là khoảng 12MHz).
Thân ái !
Comment
-
Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
Timer là ngoại vi có chức năng đơn giản là đếm các xung nhịp. Khi xung nhịp đưa vào đếm trong timer là xung nhịp hệ thống (xung nhịp của CPU) thì gọi nó là Timer (hay bộ định thời). Khi xung nhịp đưa vào đếm trong timer là tín hiệu lấy từ bên ngoài thì gọi nó là counter (hay bộ đếm sự kiện). Sở dĩ có sự phân biệt như vậy là do tính chất khác nhau của 2 loại tín hiệu này. Xung nhịp của hệ thống thì thường đều đặn (ví dụ: nếu thạch anh dùng cho 8051 là 12M thì mỗi chu kì máy là 1us) do đó có thể dùng nó để xác định thời gian (ví dụ: Cứ 1us có một xung nhịp--> nếu timer đếm được đến 100 tức là đã trôi qua thời gian là 100us). Xung nhịp lấy từ bên ngoài thì không phải luôn luôn đều đặn. ví dụ một dây chuyền đếm sản phẩm, không phải luôn luôn là 1phút có một sản phẩm đi qua.
Để lựa chọn việc sử dụng timer hay counter phụ thuộc vào giá trị khởi tạo cho thanh ghi TMOD.
MOV TMOD,#01H ; chọn time 0 che do 16 bit
MOV TL0,#LOW(-250) ; byte thấp
MOV TH0,#HIGH(-250); byte cao
SETB TR0 ; đặt
JNB TF0,$; hiển thi co TF0
CLR TF0 ; xóa TF0
CLR TR0 ; xóa TF0
RETFor a better world
Comment
-
ngắt ngoài 8051
Các anh cho em hỏi
sau khi xảy ngắt ngoài thì làm thế nào 8051 trở về chương trình chính em thử mô phỏng đă treo chân IT0 lên 5V sau ngắt nhưng 8051 vẫn chạy trong ngắt của nó mà ko trở về main
ORG 0000H
LJMP MAIN
ORG 0000BH
LJMP EX0ISR //NGAT BO DINH THOI 0
ORG 0013H
LJMP EX1ISR //NGAT BO DINH THOI 1
ORG 0030H
MAIN:
MOV IE,#00H
MOV IE,#85H
SETB IT1
SETB IT0
MOV A,#66H
BACKM:
MOV P1,A
MOV P2,A
RR A
CALL DELAY
SJMP BACKM
EX0ISR: //PHUC VU NGAT 0
MOV P1,#00H //DUNG DONG CO PHAI
MOV A,#01H
BACK0: MOV P2,A
RR A
CALL DELAY
JMP BACK0
RETI
EX1ISR: //PHUC VU NGAT 1
MOV P2,#00H
MOV A,#66H
BACK1: MOV P1,A
RR A
CALL DELAY
JMP BACK1
RETI
DELAY:
SETB PSW.3
SETB PSW.4
MOV R2,#12
AGAIN: MOV R3,#200
HERE1: MOV R4,#206
HERE2: DJNZ R4,HERE2
DJNZ R3,HERE1
DJNZ R2,AGAIN
RET
END
Comment
Bài viết mới nhất
Collapse
-
bởi nhathung1101Với servo Yaskawa thì dùng phần mềm Wide field 3. Dùng được hay không thì động não đi....
-
Channel: Điện tử công nghiệp
hôm nay, 00:35 -
-
bởi bqvietServo cuối cùng vẫn chỉ là điều chỉnh tốc độ và đọc phản hồi vị trí
Qua cổng song song LPT cổ
https://www.electronicsforu.com/elec...eed-controller
Qua cổng USB - xem thêm đám FT232RL-
Channel: Điện tử công nghiệp
Hôm qua, 15:56 -
-
bởi thiennam0703Em đang tìm hiểu cách xây dựng chương trình điều khiển động cơ Servo Yaskawa bằng máy tính tuy nhiên khi tìm kiếm trên mạng các hướng dẫn thì thường là điều khiển bằng vi điều khiển hoặc điều khiển bằng PLC hay điều khiển động cơ...
-
Channel: Điện tử công nghiệp
Hôm qua, 15:32 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi bacthoMình cũng bị như vậy mà chưa biết ở đâu
-
Channel: Vi điều khiển AVR
21-11-2024, 21:00 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi nhathung1101Câu trả lời là không dùng được.
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....-
Channel: Thiết bị điện tử cá nhân
21-11-2024, 16:20 -
-
Comment on Tổng hợp các thông tin về mạch nạp cho AVRbởi Memem
-
Channel: Vi điều khiển AVR
21-11-2024, 15:10 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi MememMọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
-
Channel: Vi điều khiển AVR
21-11-2024, 15:10 -
-
bởi mantruongepuNhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
-
Channel: Điện tử dành cho người mới bắt đầu
20-11-2024, 14:40 -
-
bởi TherulCảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
-
Channel: từ PIC tới dsPIC
20-11-2024, 07:20 -
-
Trả lời cho Em muốn hỏi mọi người về nguyên lý hoạt động, tần số của mạch công suất trong máy rửa siêu âm ạ.bởi nguyendinhvanBạn nên nghiên cứu cái chấn lưu đèn ống Compact fluorescent lamp hay đèn compact trước đã. Nó rẻ đỡ tốn kém.
Sau khi hiểu rõ rồi thì chuyển sang cái mạch này.
Ở cái chấn lưu, tần số của nó linh tinh lắm, tùy điện áp nguồn, tùy...-
Channel: Hỗ trợ học tập
19-11-2024, 22:44 -
Comment