chao QUYNH ! minh dang co bai tap lon lien quan den 8051 ,minh dang can rat gap ,ban co the gui cuon sach do den cho minh theo dia chi thucdong2000@yahoo.com ,cam on ban rat nhieu
Thông báo
Collapse
No announcement yet.
Dành cho người mới tìm hiểu 8051
Collapse
X
-
hướng dẫn của các ban rất chi tiết và hay. bạn có tập lệnh của keil c (tiếng việt càng tốt) viết cho 89c51 ko? nếu ban có gửi cho mình với.
thanhhai08@gmail.com
thank!
Comment
-
cac bác cho em hỏi em làm như thế này mà không hiểu sao nó lại bị nhấp nháy, led sang yếu( em đã thử trên mạch thật). các bác chỉ giúp em. em có gửi cả bản mô phỏng bằng Proteus.
cảm ơn!!!!
//chuong trinh thu nghiem quet LED 7 tu mot con so dua vao
#include<AT89x51.h>
#define LED8 P1_0
#define LED7 P1_1
#define LED6 P1_2
#define LED5 P1_3
#define LED4 P1_4
#define LED3 P1_5
#define LED2 P1_6
#define LED1 P1_7
#define Yes 1
#define No 0
//dinh nghia cac bien dung cho su ly tach so
#define donvi 0
#define chuc 1
#define tram 2
#define nghin 3
#define van 4
#define tramnghin 5
#define trieu 6
#define vantrieu 7
/*
#define a P0_0
#define b P0_1
#define c P0_2
#define d P0_3
#define e P0_4
#define f P0_5 ....
*/
unsigned long Buffer[8];
bit fg=No;
//0 , 1 , 2 , 3 ,4 ,5 ,6 ,7 ,8
const char LEDi[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x98,0x88,0xC6,0x86,0x8E,0x82,0x89,0x7F,0xFF};
// 9 , A , B , C , D ,E , F , . , TRANG
void delay(unsigned char ms) // tre ms
{
unsigned char i=121;
while(ms--)
{
while(i--);
}
}
void BCD(unsigned long so)
{
//tach cac so ra theo don vi tuong ung
Buffer[donvi]=so%10; //lay so du
Buffer[chuc]=so/10;
Buffer[tram]=so/100;
Buffer[nghin]=so/1000;
Buffer[van]=so/10000;
Buffer[tramnghin]=so/100000;
Buffer[trieu]=so/1000000 ;
Buffer[vantrieu]=so/10000000 ;
// tach rieng tung so mot
// theo dung hang don vi va tram cua chung
if(Buffer[chuc]<=0) Buffer[chuc]=16; //=16 la tat het cac led
else if(Buffer[chuc]>=10) Buffer[chuc]%=10;
if(Buffer[tram]<=0) Buffer[tram]=16; //=16 la tat het cac led
else if(Buffer[tram]>=10) Buffer[tram]%=10;
if(Buffer[nghin]<=0) Buffer[nghin]=16; //=16 la tat het cac led
else if(Buffer[nghin]>=10) Buffer[nghin]%=10;
if(Buffer[van]<=0) Buffer[van]=16; //=16 la tat het cac led
else if(Buffer[van]>=10) Buffer[van]%=10;
if(Buffer[tramnghin]<=0) Buffer[tramnghin]=16; //=16 la tat het cac led
else if(Buffer[tramnghin]>=10) Buffer[tramnghin]%=10;
if(Buffer[trieu]<=0) Buffer[trieu]=16; //=16 la tat het cac led
else if(Buffer[trieu]>=10) Buffer[trieu]%=10;
if(Buffer[vantrieu]<=0) Buffer[vantrieu]=16; //=16 la tat het cac led
else if(Buffer[vantrieu]>=10) Buffer[vantrieu]%=10;
}
void hienthi()
{
{
P0=LEDi[Buffer[donvi]];
LED1=0;
delay(1);
LED1=1;
P0=LEDi[Buffer[chuc]];
LED2=0;
delay(1);
LED2=1;
P0=LEDi[Buffer[tram]];
LED3=0;
delay(10);
LED3=1;
P0=LEDi[Buffer[nghin]];
LED4=0;
delay(1);
LED4=1;
P0=LEDi[Buffer[van]];
LED5=0;
delay(1);
LED5=1;
P0=LEDi[Buffer[tramnghin]];
LED6=0;
delay(1);
LED6=1;
P0=LEDi[Buffer[trieu]];
LED7=0;
delay(1);
LED7=1;
P0=LEDi[Buffer[vantrieu]];
LED8=0;
delay(1);
LED8=1;
}
}
void ngat(void)interrupt 2 using 1 // su dung ngat ngoai
{
if (P3_3==0) fg=Yes;
}
void main(void)
{
unsigned long j=0;
//TMOD=0x02;
EX1=1;
P0=1;
P1=1;
EA=1; //cho phep su dung ngat
//TR1=1;
while(1)
{
if (fg==Yes) j=j+1;
else fg=No;
BCD(j);
hienthi();
//fg=No;
}
}n
ĐT: 0986 492 489
Tham khảo:
Comment
-
Chào các bạn ,từ trước đến giờ tôi chỉ viết cho 8051 bằng asm ,hôm vừ rồi có cóp 1 file của bạn Vũ Hà Linh viết bằng C về dịch thử bằng Keil song báo nhiều lỗi o hiểu tại sao. Keil 709 tôi down từ diễn đàn về. Nhờ bạn Linh giải đáp giúp nhé .Cảm ơn.
Đa
Đây là file List sau khi đã dịch:
C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCDVD
OBJECT MODULE PLACED IN D:\Keil\C51\BIN\lcdvd.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe D:\Keil\C51\BIN\lcdvd.c
line level source
1 /************************************************** **************************/
2 /* */
3 /* File: lcd.c */
4 /* Author: Vu Ha Linh, Automatic Control Deparment */
5 /* Ha Noi university of technology */
6 /* */
7 /************************************************** **************************/
8 /* */
9 /* Function: This module is a standard LCD (16x2) functions */
10 /* */
11 /* Input and Output parameters of those subroutines: */
12 /* void LCD_Init(void); */
13 /* void LCD_Position(unsigned char, unsigned char); */
14 /* void LCD_PutCmd(unsigned char); */
15 /* void LCD_PutChar(unsigned char); */
16 /* void LCD_PrString(char*); */
17 /* void LCD_Clear(void); */
18 /* void LCD_PrInteger(int); */
19 /* */
20 /* Note: Must be call LCD_Init() first at the begining of program */
21 /* */
22 /************************************************** **************************/
23 /* */
24 /* History: */
25 /* Version: */
26 /* Date Writer Remark */
27 /* */
28 /* 30-07-2006 Vu Ha Linh Creating the first version */
29 /* */
30 /* */
31 /************************************************** **************************/
32
33 #include <REGX51.H>
*** WARNING C318 IN LINE 33 OF D:\Keil\C51\BIN\lcdvd.c: can't open file 'REGX51.H'
34 #include "lcd.h"
*** WARNING C318 IN LINE 34 OF D:\Keil\C51\BIN\lcdvd.c: can't open file 'lcd.h'
35
36 /************************************************** ***************************
37 define Hardware address
38 it can changed by user
39 ************************************************** ***************************/
40 #define LCD_PORT P1
41
42 sbit LCD_RS = P3^2;
*** ERROR C202 IN LINE 42 OF D:\KEIL\C51\BIN\LCDVD.C: 'P3': undefined identifier
43 sbit LCD_RW = P3^3;
*** ERROR C202 IN LINE 43 OF D:\KEIL\C51\BIN\LCDVD.C: 'P3': undefined identifier
44 sbit LCD_EN = P3^4;
*** ERROR C202 IN LINE 44 OF D:\KEIL\C51\BIN\LCDVD.C: 'P3': undefined identifier
45 sbit LCD_D7 = P1^7;
*** ERROR C202 IN LINE 45 OF D:\KEIL\C51\BIN\LCDVD.C: 'P1': undefined identifier
46
47 #define ReadCommand {LCD_RS = 0; LCD_RW = 1;}
48 #define WriteCommand {LCD_RS = 0; LCD_RW = 0;}
49 #define WriteData {LCD_RS = 1; LCD_RW = 0;}
C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 2
50 #define LatchData {LCD_EN = 1; LCD_EN = 0;}
51
52 /************************************************** **************************
53 WaitReady function
54 Wait while LCD in execution time
55 ************************************************** ***************************/
56 void WaitReady(void)
57 {
58 1 ReadCommand; // Set Read command mode
*** ERROR C202 IN LINE 58 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RS': undefined identifier
*** ERROR C202 IN LINE 58 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RW': undefined identifier
59 1 LCD_D7 = 1;
*** ERROR C202 IN LINE 59 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_D7': undefined identifier
60 1 while(LCD_D7){
*** ERROR C202 IN LINE 60 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_D7': undefined identifier
61 2 LCD_EN = 0;
*** ERROR C202 IN LINE 61 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
62 2 LCD_EN = 1; // Read bit D7
*** ERROR C202 IN LINE 62 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
63 2 }
64 1 }
65
66 /************************************************** **************************
67 LCD_PutCmd function
68 Write a control byte to LCD
69 Input : control byte
70 ************************************************** ***************************/
71 void LCD_PutCmd(unsigned char cmd)
72 {
73 1 WaitReady(); // Wait for LCD ready
74 1 WriteCommand; // set LCD to send mode
*** ERROR C202 IN LINE 74 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RS': undefined identifier
*** ERROR C202 IN LINE 74 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RW': undefined identifier
75 1 LCD_PORT = cmd; // Prepare to send
*** ERROR C202 IN LINE 75 OF D:\KEIL\C51\BIN\LCDVD.C: 'P1': undefined identifier
76 1 LatchData; // latch data out
*** ERROR C202 IN LINE 76 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
*** ERROR C202 IN LINE 76 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
77 1 }
78
79 /************************************************** **************************
80 LCD_PutChar function
81 Write a ASCII symbol to LCD
82 Input: ASCII symbol
83 ************************************************** ***************************/
84 void LCD_PutChar(unsigned char ch)
85 {
86 1 WaitReady();
87 1 WriteData;
*** ERROR C202 IN LINE 87 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RS': undefined identifier
*** ERROR C202 IN LINE 87 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RW': undefined identifier
88 1 LCD_PORT = ch;
*** ERROR C202 IN LINE 88 OF D:\KEIL\C51\BIN\LCDVD.C: 'P1': undefined identifier
89 1 LatchData;
*** ERROR C202 IN LINE 89 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
*** ERROR C202 IN LINE 89 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
90 1 }
91
92 /************************************************** ***************************
93 LCD_PrString function
94 Write a string to LCD
95 Input: string
C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 3
96 ************************************************** ****************************/
97 void LCD_PrString(char *str)
98 {
99 1 while(*str!='\0')
100 1 {
101 2 LCD_PutChar(*str);
102 2 ++str;
103 2 }
104 1 }
105
106 /************************************************** ***************************
107 LCD_Position function
108 Set the position of cursor on LCD
109 Input: row, column
110 ************************************************** ****************************/
111 void LCD_Position(unsigned char row, unsigned char col)
112 {
113 1 LCD_PutCmd( (1<<7)|(row<<6)|col );
114 1 }
115
116 /************************************************** ***************************
117 LCD_Clear function
118 Clear LCD
119 ************************************************** ****************************/
120 void LCD_Clear()
121 {
122 1 LCD_PutCmd(LCD_CLEAR);
*** ERROR C202 IN LINE 122 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_CLEAR': undefined identifier
123 1 }
124
125 /************************************************** ***************************
126 LCD_Init function
127 Prepare for display content. Must be called at first
128 ************************************************** ****************************/
129 void LCD_Init()
130 {
131 1 LCD_PutCmd(0x30); // Data length setting, 8 bits
132 1 LCD_PutCmd(0x30); // Data length setting, 8 bits
133 1 LCD_PutCmd(0x30); // Data length setting, 8bits
134 1
135 1 LCD_PutCmd(LCD_FONT); // Function set: 8 bits, 2 lines, font 5x7
*** ERROR C202 IN LINE 135 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_FONT': undefined identifier
136 1 LCD_PutCmd(LCD_OFF); // Display and cursor OFF
*** ERROR C202 IN LINE 136 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_OFF': undefined identifier
137 1 LCD_PutCmd(LCD_CLEAR); // Clear display
*** ERROR C202 IN LINE 137 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_CLEAR': undefined identifier
138 1 LCD_PutCmd(LCD_MOVE_CURSOR); // Entry mode set: Increment mode, not shift
*** ERROR C202 IN LINE 138 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_MOVE_CURSOR': undefined identifier
139 1 LCD_PutCmd(LCD_DISPLAY_ON); // Display ON
*** ERROR C202 IN LINE 139 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_DISPLAY_ON': undefined identifier
140 1 // LCD_PutCmd(LCD_BLINK_CURSOR); // Blink cursor
141 1 }
142
143 /************************************************** **************************
144 LCD_PrInteger function
145 Display a integer decimal number on LCD
146 Input: a integer number
147 ************************************************** ***************************/
148 void LCD_PrInteger(int num)
149 {
150 1 int temp;
151 1 unsigned char i, c[5];
C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 4
152 1
153 1 temp = num;
154 1 if (temp != 0) {
155 2 if (temp < 0) {
156 3 LCD_PutChar('-');
157 3 temp = -temp;
158 3 }
159 2 i = 0;
160 2 while(temp){
161 3 c[i++] = temp%10;
162 3 temp /= 10;
163 3 }
164 2 while(i) LCD_PutChar(c[--i] + '0');
165 2 }
166 1 else LCD_PutChar('0');
167 1 }
168
169 /************************* END OF FILE *******************************/
170
171
172
C51 COMPILATION COMPLETE. 2 WARNING(S), 26 ERROR(S)
Comment
-
Cảm ơn Quỳnh nhiều nha, mình là dân mới tập tành về VDK nên còn lơ mơ lắm và ỏ chổ minh ở cũng chẳng ai dạy dỗ vấn đề này nên phải tự mò, có gi` hay mong chỉ giáo thêm. binhfordlmt@yahoo.com, cho xin email được ko ? or số cầm tay? THANKS rất nhiều.
Comment
-
chào các bạn, mình đang bước đầu học vi điều khiển mình thấy các bạn thảo luận toàn là cách lập trình ,chả thấy master nào nói về cách làm phần cứng giao tiếp với rom (chương trình) ngoài, ram, ic ngoại vi(8255), bây giờ mình cần kết nối 1 con vdk 89c51 với 3con 8255,1ram16k, 1rom 8k,1 con giải mã bàn phím (con gì mình quên mất rồi), 1 con 8253 thì làm thế nào bây giờ?, nếu làm xong phần này thì mới thực sự làm chủ xong phần cứng của 8051.bài giải mã ở trên mình nhờ bạn Quỳnh giúp cho nhé!( bạn hướng dẫn chi tiết dùm mình)
Lại còn vân đề đệm bus địa chỉ , đệm bus dữ liệu,khi giải mã địa chỉ thì lúc chọn trang 2k, lúc chọn trang 8k....(bạn nào nói rõ phần này hộ mình), làm mình đien hết đầu, mình muốn hỏi khi nào cần đệm(bạn nào hiểu rõ hãy cho một ví dụ minh họa càng cụ thể càng tốt)
Nếu làm thành thạo việc giao tiếp với các ic như ở trên thì phần mềm có thể tự nghiên cứu cũng được, chứ phần cứng anh làm sai be sai bét thì viết giỏi cõ nào cũng bó tay.
Mình nghĩ phương pháp tốt nhất là giới thiệu cái tổng quan, và giúp người học thành thạo cái tổng quan đó, rồi còn đi vào chi tiết thì để người tự học, không hiểu chỗ nào thì hỏi, tự ngâm cứu bao giờ cũng thú vị hơn chứ !
mình đọc sách của tống văn on, kể cả sách tiếng anh dày cộp thầy mình đưa cho, thấy vấn đề giao tiếp với ic nhớ, ic ngoại vi không nhiều lắm(hơi qua loa thì phải).
mình không tạo thread mới vì sợ mấy master chê cười rằng phần giải mã địa chỉ là phần cơ bản, e rằng lại trả lời vắn tắt quá hoặc tệ hơn là phán một cầu bạn đọc thêm sách hay học lai đi bồ thì toi(ông cuong quậy đã trả lời như rứa đối với một bạn đăt câu hỏi tương tự trong www.3ihut.com,it ra cũng phải giúp người ta chứ, có ngu thì mới hỏi chứ bồ, bồ có giỏi cỡ mấy cũng không thể qua mặt các chú tây béo được,bằng chứng là bồ vẫn xài chùa phần mềm của họ đây thôi,họ giỏi vì có lẽ học hỗ trợ nhau rất tốt, thầy chủ nhiệm mình có nói: 3 thằng châu á rơi xuống một cái hỗ sâu trong rừng thì 3 thằng đứt cả còn 3 thằng tây thì lại sống nhăn rằng, chắc các bạn hiểu là tại sao;
Trong sách không nói nhiêu, hỏi thầy thì ôi thôi, lại giáo điều .......nên mình mới diễn đàn hỏi chứ bộ!
Bạn quỳnh cho mình xin email để có thể trao đổi thêm.
email của mình là: dieungoclongvn@gmail.com
Comment
-
-
Bac Quynh co the gui cho em may cuon hoc ve VDK o
em moi bat dau hoc nên cam thay kho wa
Dia chi cua em la tranmanhtienat@gmail.com
thanks bac nhieu|
Comment
-
minh moi down dc cuon final word for 8051 ban nao can mail cho toi theo dia chi tranmanhtienat@gmail.com|
Comment
Bài viết mới nhất
Collapse
-
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 nay, 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 nay, 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
Hôm qua, 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
Hôm qua, 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
Hôm qua, 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
Hôm qua, 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 -
-
bởi yname11 E có 1 laptop bị hỏng màn hình, e tháo ra thì thấy nó có 4 lớp , lớp ngoài cùng là 1 lớp nhựa rất mỏng màu hơi đen ( chắc là 1 loại film dán), tiếp theo là 1 lớp thủy tinh bị vỡ (màu đen) , đến 1 lớp thủy tinh trắng ( lớp này có...
-
Channel: Thiết bị điện tử cá nhân
18-11-2024, 19:12 -
Comment