Thứ Bảy, 25 tháng 9, 2010

Tìm hiểu về LED

LED (viết tắt của Light Emitting Diode, có nghĩa là điốt phát quang) là các điốt có khả năng phát ra ánh sáng hay tia hồng ngoại, tử ngoại. Cũng giống như điốt, LED được cấu tạo từ một khối bán dẫn loại p ghép với một khối bán dẫn loại n.


Sau đây là hình ảnh LED 3d:


Hoạt động


Hoạt động của LED giống với nhiều loại điốt bán dẫn.

Khối bán dẫn loại p chứa nhiều lỗ trống tự do mang điện tích dương nên khi ghép với khối bán dẫn n (chứa các điện tử tự do) thì các lỗ trống này có xu hướng chuyễn động khuếch tán sang khối n. Cùng lúc khối p lại nhận thêm các điện tử (điện tích âm) từ khối n chuyển sang. Kết quả là khối p tích điện âm (thiếu hụt lỗ trống và dư thừa điện tử) trong khi khối n tích điện dương (thiếu hụt điện tử và dư thừa lỗ trống).


Ở biên giới hai bên mặt tiếp giáp, một số điện tử bị lỗ trống thu hút và khi chúng tiến lại gần nhau, chúng có xu hướng kết hợp với nhau tạo thành các nguyên tử trung hòa. Quá trình này có thể giải phóng năng lượng dưới dạng ánh sáng (hay các bức xạ điện từ có bước sóng gần đó).


Tính chất

Tùy theo mức năng lượng giải phóng cao hay thấp mà bước sóng ánh sáng phát ra khác nhau (tức màu sắc của LED sẽ khác nhau). Mức năng lượng (và màu sắc của LED) hoàn toàn phụ thuộc vào cấu trúc năng lượng của các nguyên tử chất bán dẫn.


LED thường có điện thế phân cực thuận cao hơn điốt thông thường, trong khoảng 1,5 đến 3 V. Nhưng điện thế phân cực nghịch ở LED thì không cao. Do đó, LED rất dễ bị hư hỏng do điện thế ngược gây ra.


Ứng dụng




Đèn chiếu sáng sử dụng các LED phát ánh sáng trắng.


LED được dùng để làm bộ phận hiển thị trong các thiết bị điện, điện tử, đèn quảng cáo, trang trí, đèn giao thông.



Có nghiên cứu về các loại LED có độ sáng tương đương với bóng đèn bằng khí neon. Đèn chiếu sáng bằng LED được cho là có các ưu điểm như gọn nhẹ, bền, tiết kiệm năng lượng.


Các LED phát ra tia hồng ngoại được dùng trong các thiết bị điều khiển từ xa cho đồ điện tử dân dụng.


Hiện tại đèn LED trắng có tuổi thọ tới 100.000 giờ sử dụng, gấp 100 lần so với bóng đèn 60W. Điều này có nghĩa là chúng có thể thắp sáng liên tục trong vòng 60năm. Và hơn thế nữa chúng dùng điện áp thấp cho nên không gây cháy nổ mà tích kiệm điện hơn nhiều so với bóng đèn khác.


Điểm hấp dẫn ở loại đèn này là này nó có thể sử dụng để lắp đặt ở những nơi khó thay lắp chẳng hạn như bên ngoài toà nhà, bể bơi v.v.. thay vì phải sử dụng bóng đèn thông thường


Do những đặc điểm nổi trội trên nên giờ đèn LED đã được ứng dụng để Quảng Cáo. Và cuộc cách mạng về đèn LED sẽ nhanh chóng thay đổi những biển quảng cáo, hộp đèn, đèn neon sign cũ kỹ. Và nhanh tay cho những ai biết nắm bắt để có cơ hội quảng bá Thương Hiệu, Cửa Hàng, Sản Phẩm...v..v.. bằng đèn Led.


http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Giao tiếp với led đơn

Giao tiếp với led đơn
Thứ hai, 22 Tháng 2 2010 14:05 Quản trị viên
Email In PDF.

Trong bài viết này mình sẽ giới thiệu cách tạo một mạch buffer (mạch đệm dòng) bằng transistor để giao tiếp với LED đơn và cách tính các thông số trên mạch:

Khi chân ra của VĐK là 1

Chúng ta sẽ sử dụng cách mắc Transistor này khi giao tiếp chân output của vi điều khiển (VĐK) để bật tắt LED. Khi ở trạng thái “on”, để LED sáng thì dòng qua LED cần trung bình khoảng 20mA và đa số các vi điều khiển không thể sinh đủ dòng để lái LED khi output (mạch phía trên thắp sáng Led khi VĐK xuất mức 1).

Áp rơi trên LED thay đổi tùy thuộc màu sắc của LED. Tham khảo thêm bài Sử dụng đèn LED.

* Hồng ngoại 1.2V
* Đỏ 1.7V
* Vàng 2.1V
* Xanh lá cây 2.2V
* Xanh dương 3.6V
* Trắng 3.6-4V

Đối với mạch như thế này, thông thường người ta thường chọn điện trở phân cực sao cho transistor hoạt động trong vùng bão hòa (transistor đóng vai trò như một khóa điện tử và điện áp rơi trên cực C-E vào khoảng 0.2-0.3V. Hệ số khuếch đại trong vùng bão hòa thường không cao, hfe vào khoảng 50 trở lại). Trong bài này, mình chọn Vce=0.2V, Vcc=5V, hfe=50, Vled=2.1V. Theo đó, R1 và R2 được tính như sau:

R1=(5V – Vled – Vce)/ (20mA) = 135 Ohm

Dòng cực B của transistor: Ib = 20mA/50 = 0.4mA

Áp rơi trên mối nối B-E: Vbe= 0.7V

Điện áp khi vi điều khiển xuất mức cao vào khoảng 5V (hiện nay nhiều loại VĐK dùng điện áp 3.3V, nên cấu trúc mạch và cách tính sẽ thay đổi tùy thuộc VĐK và nguồn).

R2=(5-Vbe)/ Ib = 10.75k Ohm

Bạn có thể chọn R1=130 ohm và R2= 11k Ohm theo giá trị chuẩn của điện trở.

Cách tính trên đây chỉ là gần đúng để các bạn tham khảo và có hướng chọn thiết kế cho riêng mình.

Nếu các bạn muốn LED sáng khi VĐK xuất mức 0 thì ta không dùng NPN transistor mà chuyển sang PNP và cách tính cũng tương tự NPN.

Khi chân ra của VĐK là 0
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Mạch Led nhấp nháy theo nhạc

Mạch Led nhấp nháy theo nhạc
Thứ ba, 12 Tháng 8 2008 16:26 Quản trị viên
Email In PDF.



Bạn nghe 1 bản nhạc sôi động và cảm thấy hình như vẫn còn thiếu chút gì đó, vậy tại sao không tự làm 1 mạch led nhấp nháy theo điệu nhạc để hòa cùng bạn vào thế giới của giai điệu. Mình sẽ hướng dẫn 1 cách đơn giản nhất để làm được điều đó.

Sản phẩm sau khi hoàn thành



Sơ đồ nguyên lý
Nguyên tắc hoạt động rất đơn giản: tín hiệu âm thanh từ nguồn audio được đưa tới cực B của transitor kích cho transitor dẫn cấp dòng cho led. Tín hiệu âm thanh có mạnh có yếu khi qua transitor tạo dòng mạnh yếu khác nhau làm led sẽ trông như nhấp nháy theo điêụ nhạc. Tùy theo điện áp cấp cho mạch mà bạn tính toán xem có cần thêm trở hạn dòng hay không. Mạch ở trên dùng nguồn 9VDc và nguồn audio từ ipod.
Tín hiệu Input 1 và input 2 được lấy từ jack 3 ly nối với nguồn audio như hình sau, các bạn cắt 1 đầu của jack 3 ly sẽ thấy 3 dây, trong đó có dây đỏ và trắng là tín hiệu âm thanh sẽ nối vào 2 Input, dây còn lại là GND nối với mass

Gắn 3 dây vào mạch
Sau khi hoàn thành, bạn có thể bỏ vào hộp và trang trí theo ý thích của mình.

Bỏ vào hộp cho gọn gàng nào!

Đây chỉ là mạch rất đơn giản, bạn có thể sử dụng VĐK để thực hiện ý tưởng, ngoài ra có thể sử dụng LED RGB để cho màu sắc sống động nữa.
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Mạch điều khiển nhiệt độ không thay đổi

Mạch điều khiển nhiệt độ không thay đổi
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:32

Mạch này dùng để điều chỉnh nhiệt độ thấp có thể sử dụng làm ỏn định nhiệt chính xác của mạch điện tử. Ví dụ trong bộ khuyếch đại tần số Radio làm ổn định nhiệt của mạch khuyếch đại

Constant Temperature Circuit

PWM điều khiển tốc độ động cơ 12V hạ áp
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:30


Cái này dùng để điều khiển động cơ 1 chiều.

Chuyển đổi bộ nguồn sang 9V, 0.75A nhỏ dùng BJT
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:29

Dùng 2 BJT BD242 and BC549C. Với P1 điều khiển điện áp đầu ra và P2 điều khiển dòng đầu ra.

Power supply regulator mini 9V 0.75A by Transistor

Tự động điều chỉnh nhiệt độ của quạt dung LM741
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:28

Mạch này khá đơn giản . Các pác có thể tham khảo!

Mạch thu phát hồng ngoại dùng LM567
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:27


Mạch này có thể sử dụng để điều khiển các hệ thống.Cần điều khiển từ xa!

Các bài viết khác...

* Bộ điều chỉnh điện áp cho quạt DC dùng LM2941
* Hồng ngoại điều khiển công tắc bằng remote
* Mạch điều khiển SCR bởi âm thanh bằng 1458 va CD106D
* Điều khiển từ xa bằng hồng ngoại

http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Bộ điều chỉnh điện áp cho quạt DC dùng LM2941

Bộ điều chỉnh điện áp cho quạt DC dùng LM2941
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:25

Mạch này các pác có thể tham khảo!

Hồng ngoại điều khiển công tắc bằng remote
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:23


Mạch này dùng để điều khiển đóng cắt từ xa. tín hiệu thu phát là tín hiệu hồng ngoại. Ở đây ta đóng cắt bằng Rơle

Mạch điều khiển SCR bởi âm thanh bằng 1458 va CD106D
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:21


Đây là bộ chuyển mạch điện tử điều khiển bằng âm thanh. Nó là mạch tương đối nhỏ và dễ làm.

Điều khiển từ xa bằng hồng ngoại
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:19


Mạch này dùng để điều khiển thiết bị xoay chiều thông qua hệ thông cách ly. C1 dùng 40uF. Bộ tạo và phát tín hiệu là dao động 555. Mạch này tương đối dễ làm. các bạn có thể tham khảo
Infrared Remote Control

Phát hồng ngoại dùng NE555
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:17

Đây là mạch phát tín hiệu sử dụng NE555. Với tần số phát đi do ta điều chỉnh biến trở. Mạch này tương đối đơn giản và dễ là dễ hiểu. Các pác có thể lắp và thực hành được!
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.
Âm thanh điều khiển động cơ
Viết bởi Administrator
Thứ bảy, 02 Tháng 1 2010 01:46
Đây là mạch điều khiển động cơ bằng âm thanh khá là đơn giản. Mạch sử dụng OPMA và FipFlop để điều khiển cầu H điều khiển động cơ.
Âm thanh từ đầu vào được qua Mic sau đó đưa vào các bộ so sánh của LM324 để tạo ra các xung đầu ra. Các xung đầu ra của LM324 điều khiển FF - 4027 làm cho đầu ra của FF tại chân Q và Q- đối nhau về mức logic. Các giá trị này được điều khiển cầu H để điều khiển động cơ. Mạch này có thể điều khiển động quay thuận nghịch được. Cái này các pác tìm hiểu thêm mạch trong con LM324 và 4027!

Điều khiển thu phát sóng siêu âm
Viết bởi Administrator
Chủ nhật, 04 Tháng 10 2009 04:34

Sóng siêu âm là sóng có tần số cao, là một âm thanh mà con người chúng ta không nghe thấy được tức là nó ngoài 20Khz. Đây là sơ đồ truyền phát sóng siêu âm đơn giản

Đây là bộ phát và thu tín hiệu sóng siêu âm. Mạch phát có nhiệm vụ tạo ra sóng siêu âm có tần số khá cao là 40 - 50hz do con IC 555 tạo và được phát bởi thiết bij phát sóng siêu âm. Còn bên nhận sóng siêu âm nó cũng gồm 1 con thu sóng siêu âm và tín hiệu nhận được đem vào so sánh với tín hiệu đặt của con khuếch đại thuật toán và ra điều khiển tải. Mạch này cũng gọi là tương tự như mạch thu phát hồng ngoại nhưng ở đây là tần số âm thanh còn kia là tần số của ánh sáng. Đều là những thứ mà ta không nghe và không nhìn thấy được!

Điều khiển thu phát hồng ngoại dùng PT2248- 49
Viết bởi Administrator
Chủ nhật, 26 Tháng 4 2009 00:12

Đây là mạch thu phát nhiều kênh sử dụng IC PT2248 và 2249. Mạch này cũng tương đối đơn giản và lắp đặt dễ dàng. Nhưng 1 điều quan trong là chọn diode cho mạch phát là diot xung 1N4148. Chọn LED thu con 3 chân vỏ bằng sắt cũng được mục đích là để chống nhiễu bên ngoài còn con 2 chân cũng được nhưng mà nhiễu bên ngoài tác động sẽ làm ảnh hưởng tới mạch thu phát.

Điều khiển đèn giao thông dùng IC số
Viết bởi Administrator
Chủ nhật, 26 Tháng 4 2009 00:12




Ứng dụng của mạch này là đếm xung giao độn. 555 tạo xung dao động với thời gian tùy ý dựa vào điều chỉnh bằng điện trở giữa chân 2 và chân 6. 4017 là IC dùng để đếm xung ở đây là chia 10 tức là nó sẽ đếm được 10 xung sườn lên của 555. đến xung thứ 11 thì nó reset về 0 bắt đầu 1 chu kì đếm mới.

Nên trong mạch này để thời gian đèn green là lâu hơn các đèn khác.

PWM điều khiển tốc độ động cơ DC
Viết bởi Administrator
Chủ nhật, 04 Tháng 1 2009 13:33

Chà mạch này nhìn thấy đã ngán rồi! huuuuuuuuuuu. Bây giờ dùng Vi xử lý cho nó chính xác!

Các bài viết khác...

* Mạch điều khiển nhiệt độ không thay đổi
* PWM điều khiển tốc độ động cơ 12V hạ áp
* Chuyển đổi bộ nguồn sang 9V, 0.75A nhỏ dùng BJT
* Tự động điều chỉnh nhiệt độ của quạt dung LM741
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Mạch tạo trễ 9s và mạch rơle

Mạch tạo trễ 9s và mạch rơle Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:00



Đây là mạch trễ 9 s được sử dụng 10 con LED cung cấp bở nguồn 12V. Khi đóng chân reset , 4017 bắt đầu đếm hệ thập phân và ddc bắt đầu từ 0 được điều khiển từ chân 3 của 555. Khi công tắc mở thì tran lúc đó sẽ đóng tụ 22u bắt đầu được nạp thì 555 sẽ sinh ra 1 tín hiệu đưa vào 4017 và bắt đầu đếm từ 0 đến 10.

Mở rộng bộ sắp sếp thứ tự 16LED Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:00




Bộ sắp sếp thứ tự 18 LED dùng 4017 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 00:59


The LED sequencer below shows a possible solution using a few extra parts. When power is applied, the 15K resistor and 10uF cap at pin 15 will reset the counters to the zero count where pin 3 is at +12 and all other outputs are at zero. The 2 diodes (1n914) and 15 resistor form a AND gate so the clock pulse will be passed to the right side counter when the sequence starts.

Sắp xếp dãy 60 LED sử dụng LED ma trận Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 00:57



Mạch này khá là hay. Các pác có thể lắp và ứng dụng được nó!
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

LED nhấp nháy công suất dùng LM3909

LED nhấp nháy công suất dùng LM3909 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:06


Công suất đầu ra của LED ta có thể điều chỉnh bằng R1. dùng LM3909 và transitor RS2009 có thể thay bằng BC547 , BC549 ,C1815

Power LED Flasher by LM3909

LED nhấp nháy dùng LM3909 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:05


Mạch này chỉ sử dụng nguồn 1.5V. Khi S1 đóng hay mở thì tần số nháy LED lần lượt là 5.5 và 2 HZ.Quá đẹp

555 tạo led nhấp nháy Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:04



Circuit IC 555 LED Flasher

LED chạy theo dùng 4017 và 555 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:03


Đây là mạch tương đối đơn giản. Mỗi lần 1 xung đưa vào 4017 thì nó sẽ sáng 1 con LED cứ thế cho đến LED thứ 10 thì nó lặp lại như trên.

Đèn nháy đẹp sử dụng C1016 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:02


Đây thực chất là tạo dao động đa hài!
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

LED-LED

LED-LED
LED hiệu chỉnh bởi Lm334 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 03:13



Đây là mạch hiệu chỉnh led. Mạch sử dung Lm334 cho hiệu chỉnh dòng chạy qua LED Điều chỉnh dòng chạy qua led bằng cách điều chỉnh R.

với:

R = 10 OHM : I LED =6.4mA
R = 15 OHM : ILED = 4.3mA
Bạn có thể sử dụng nguồn 3 đến 12V . nó sử dụng dòng thấp ổn định tiết kiệm điện năng rất tốt.

Đồng hồ đo nguồn công suất thấp dùng LM3914 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 03:13



This is a low power voltmeter circuit that can be used with alternative energy systems that run on 12 and 24 volt batteries. The voltmeter is an expanded scale type that indicates small voltage steps over the 10 to 16 volt range for 12 volt batteries and over the 22 to 32 volt range for 24 volt batteries. Power consumption can be as low as 14mw when operated from 12V and 160mw when operated from 24V. It is possible to set the meter to read equal steps across a variety of upper and lower voltages. The meter saves power by operating in a low duty-cycle blinking mode where the LED indicators are only on and consuming power briefly during a repeating 2 second cycle. The circuit may be switched to a high power mode where the active LED stays on at all times

Âm lượng kế LED dùng LM339 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 03:11


Mạch này cũng vui đó chứ!

Bộ theo dõi điện áp dùng LM3914 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:09



Sử dụng các LED để hiện thì chúng!

Mạch hiện thị điểm - thanh chắn dùng LM3914 Array In Array
Viết bởi Administrator
Thứ sáu, 09 Tháng 1 2009 01:07


Circuit basic dot-bar Display for LM3914

Các bài viết khác...

* LED nhấp nháy công suất dùng LM3909
* LED nhấp nháy dùng LM3909
* 555 tạo led nhấp nháy
* LED chạy theo dùng 4017 và 555
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Acer ra mắt bộ sưu tập màn hình LED S1 series

Bộ ba màn hình LCD vừa được Acer giới thiệu được thiết kế theo phong cách hiện đại với đèn nền LED cho phép màu sắc trên màn hình hiển thị trung thực với độ sáng cao và rút ngắn thời gian khởi động màn hình.

Màn hình S243HL rộng rãi với 24 inch.

Ngoài màn hình S243HL có kích thước 24inch, những sản phẩm khác thuộc dòng S1 series này bao gồm S191HQL, S221HQL có độ dày lần lượt là 13mm và 13.2mm đồng đều tại mọi điểm trên toàn bộ phần khung đỡ màn hình. S1 series có độ tương phản 12,000,000:1 cho hình ảnh sắc nét hơn những màn hình thông thường (độ tương phản chỉ có 50,000:1) nhờ sử dụng công nghệ Acer Adaptive Contrast Management (Quản lý độ tương phản một cách thích nghi) cho phép theo dõi và điều chỉnh linh động trên từng khung hình đơn lẻ.

Màn hình Acer trong S2 series thân thiện với môi trường vì không sử dụng các chất độc hại như thủy ngân, khí gas halogen, PVC hay BFR, thậm chí thùng xốp, phụ kiện và cả phần vỏ ngoài màn hình cũng được làm từ những vật liệu có khả năng tái chế. Sản phẩm đã đạt được chứng nhận Energy Star 5.0 và PoHS.

Hệ thống đèn LED (Ligh_Emmiting Diode) có độ sáng 250cd/m2, hiển thị trên 16 triệu màu có tốc độ đáp ứng (response time) tới 5ms cho phép người sử dụng xem những bộ phim hành động có tình tiết nhanh liên tục không gặp phải hiện tượng lưu ảnh (hay còn gọi là bóng ma) từ những khung hình trước. Bên cạnh đó là khả năng tiết kiệm điện năng tới 68% so với những màn hình LCD sử dụng đèn nền CCFL (LCD thường). Khả năng này đặc biệt ấn tượng cho những doanh nghiệp sở hữu hàng chục đến hàng trăm màn hình LCD Acer đèn nền LED.

Màn hình LED S1 series hỗ trợ các cổng kết nối VGA, DVI ngoài ra còn có thêm cổng HDMI cho 2 mẫu màn hình S221HQL và S243HL.

S1 series hiện đã có bán trên thị trường với giá bán lẻ đã bao gồm VAT niêm yết lần lượt là S191HQL (18.5’’ Slim LED) 2,9 triệu; S221HQL (21.5’’ Slim LED) 4,7 triệu và S243HL (24’’ Slim LED) 7,4 triệu đồng



http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Thứ Sáu, 24 tháng 9, 2010

Phần mềm lập trinh tự động led quảng cáo tiên tiến

Phần mềm lập trinh tự động led quảng cáo tiên tiến
Giới thiệu:

SoftLed là giải pháp phần mềm tiết kiệm nhất cho những người làm
quang báo với biển chữ chạy, biển vẫy,... Các bạn không cần biết lập
trình vi xử lí mà vẫn có thể dễ dàng tạo ra được những hiệu ứng bắt mắt
với SoftLed. Bạn có thể rút ngắn thời gian biến ý tưởng thành sản phẩm,
đồng thời giảm bớt chi phí hàng tháng để thuê 1 hoặc 2 người lập trình.

SoftLed có khả năng tạo ra file HEX dùng để nạp trực tiếp vào vi xử
lí họ MCS51 (8051).

SoftLed có khả năng tạo ra những độ sáng khác nhau trên cùng một
cổng, do đó tạo ra những hiệu ứng mờ dần, sáng dần cực kì ấn tượng mà
thậm chí nhiều người lập trình viên không thể làm được.

Một ưu điểm khác của chức năng này là nó cho phép bạn điều chỉnh
lượng điện năng tiêu thụ trên mạch bằng cách điều chỉnh độ sáng của các
đèn LED, chính vì thế bạn có thể dùng nguồn bé mà vẫn chạy được nhiều
LED nếu giảm cường độ sáng xuống.
SoftLed còn hỗ trợ bạn mô phỏng hiệu ứng một cách chính xác, qua đó
giúp bạn hình dung tốt hơn về hiệu ứng thật khi nạp vào chip.


Link down bản dùng thử:
[You must be registered and logged in to see this link.
http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

tông hợp Lập trình C cho VXL - Cơ bản

ác bạn xem tới bài gần cuối đã có bản Pdf toàn bộ tài liệu này do VAGAM thực hiện

Toán tử gán (=). Ex:

c code

1.

2.
b = 5;
3.
a = 2 + b;
4.
a = 2 + (b = 5);
5.
a = b = c = 5;
6.




Các toán tử số học ( +, -, *, /, % )
+ cộng
- trừ
* nhân
/ chia
% lấy phần dư (trong phép chia)

Các toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)value += increase; tương đương với value = value + increase;a -= 5; tương đương với a = a - 5;a /= b; tương đương với a = a / b;price *= units + 1; tương đương với price = price * (units + 1);Tăng và giảmc code 1. ++ c code 1. a++; <=> a+=1; <=> a=a+1; tính chất tiền tố hoặc hậu tố (++a) # (a++) ExB=3;B=3;A=++B;// A is 4, B is 4B=3;A=B++;// A is 3, B is 4Các toán tử quan hệc code 1. ( , !=, >, <, >=, <= )c code 1. 2. Bằng 3. != Khác 4. > Lớn hơn 5. < Nhỏ hơn 6. > = Lớn hơn hoặc bằng 7. < = Nhỏ hơn hoặc bằng 8. EXc code 1. 2. (7 5) sẽ trả giá trị false 3. (6 >= 6) sẽ trả giá trị true tất nhiên thay vì sử dụng các số, chúng ta có thể sử dụng bất cứ biểu thức nào. Cho a=2, b=3 và c=6c code 1. 2. (a*b >= c) sẽ trả giá trị true. 3. (b+4 < a*c) sẽ trả giá trị false 4. Chú ý rằng = (một dấu bằng) lf hoàn toàn khác vớic code 1.(hai dấu bằng). (c code 1.) nhằm so sánh còn (=)gán giá trị của biểu thức bên phải cho biến ở bên trái .Các toán tử logic ( !, &&, || ).! NOT&& AND|| OREX:(3 > 6)) trả về true ( true code

1.

2.
!(5 5) trả về false vì biểu thức bên phải (5 5) có giá trị true.
3.
!(6 <= 4) trả về true vì (6 <= 4)có giá trị false. 4. !true trả về false. 5. !false trả về true. 6. ( (5 5) && (3 > 6) ) trả về false ( true && false ).
7.
( (5 5)



Các toán tử thao tác bit ( &, |, ^, ~, <<, >> ).

& AND Logical AND
| OR Logical OR
^ XOR Logical exclusive OR
~ NOT Đảo ngược bit
<< SHL Dịch bit sang trái>> SHR Dịch bit sang phải

Thứ tự ưu tiên của các toán tử

Toán tử logic Trái
11 ?: Toán tử điều kiện Phải
12 = += -= *= /= %=
>>= <<= &= ^= |= Toán tử gán Phải13 , Dấu phẩy Tráicode 1. 2. 1 :: scope Trái 3. 2 () [ ] -> . sizeof Trái
4.
3 ++ tăng/giảm Phải
5.
~ Đảo ngược bit
6.
! NOT
7.
& * Toán tử con trỏ
8.
(type) Chuyển đổi kiểu
9.
+ - Dương hoặc âm
10.
4 * / % Toán tử số học Trái
11.
5 + - Toán tử số học Trái
12.
6 << >> Dịch bit Trái
13.
7 < <= > >= Toán tử quan hệ Trái
14.
8 != Toán tử quan hệ Trái
15.
9 & ^ | Toán tử thao tác bit Trái
16.
10 &&






giotdang1985@yahoo.com


thtam | 11:00:18 05-08-07 | Posts: 23 2
Kiến thức C cơ bản dùng lập trình VXL

kiến thức này rất cần cho những người như tôi, chỉ quen dùng asm và bascom.

mong bạn tiếp tục viết các kiến thức C mà bạn đã dùng cho vi điều khiển?

Bạn có thể nói qua khoảng bao nhiêu lệnh C và nhiều ko vậy?

Nếu học thì tốn khoản nhiều thời gian không bạn? có thể bắt đầu bằng các bài nào vậy?

Chúc bạn luôn vui!





Nothing is not possible!!!
I am doing and it will be done by me!

thật tuyệt vời, em xin hỏi cách viết 1 delay trong C cho mọi vi điều khiển là thế nào ạ?

Em ví dụ sau nhé:
Bài toán kiểm tra relay, nếu thay đổi vị trí relay thì mở động cơ lên.

box code

1.
org
2.

3.
dc_cong_tac euq bit 1.0
4.

5.
relay euq bit 1.1
6.

7.
main
8.

9.
abc: // Nhản
10.
djnz relay, 0 // kiem tra trang thay relay co ở mức thấp ko
11.
lmp: abc //quay lại nhản nếu relay chưa đổi trạng thái
12.
set dc_cong_tac // bật động cơ để mở công tắc (công tắc đèn chẳng hạn)
13.

14.
ret



(Lâu quá em ko viết lại ASM, có gì nhờ anh trietnguyen chỉ giúp lại chỗ sai)

Vậy chyển qua C thì thế nào ạ? thanks các anh



mitvn@gmail.com
Một ngày mitvn sẽ giỏi lập trình!
Ai có câu hỏi gì về C, và matlab cứ viết lên để giúp tôi tiến bộ hơn với nhé!
Writing C Code for the 8051

Interrupt : Vector address ; Interrupt number
External0 0003h 0
Timer0 000Bh 1
External1 0013h 2
Timer 1 001Bh 3
Serial 0023h 4

c code

1.

2.
org 00h
3.
ljmp main
4.
org 0003h
5.
ljmp ngat0
6.
org 30h
7.

8.
main:
9.
...
10.
Here: sjmp Here
11.

12.
ngat0:
13.
...
14.
reti



code C

box code

1.

2.
void main
3.
{
4.
...
5.
while(1)
6.
}
7.
void ngat0(void) interrupt 0
8.
{
9.
...
10.
}


Chào bạn,

. Keil C và Codevison tuy cùng dùng C khác nhau ở các lệnh hỗ trợ cho từng loại vđk. Đó tạo ra nét riêng của từng trình biên dịch, cái nào mạnh hơn cái nào một phần cũng là do vậy.

. Về C trong Keil: chẳng hạn kiểu dữ liệu bit, sbit, sfr.. chỉ gọi là C của Keil thôi. còn cấu trúc while.. là C chuẩn. những kiểu dữ liệu đó của riêng từng trình biên dịch, nhà sx quy định.
Ngoài ra Keil còn chứa các lệnh hỗ trợ dành riêng cho vđk, chẳng hạn lệnh

c code

1.
_crol_, _cror_

hoặc trong Bascom có lệnh

c code

1.
lcd, wait..v.v

, đó có thể gọi là lệnh hỗ trợ rồi còn gì biggrin

. Pinnacle dùng Asm, do vậy mình mà mình chỉ nhắc đến ngôn ngữ bậc cao thôi, đó là C và Basic, chắc do bạn đọc k kĩ smile

Chúc thành công !




Nơi nào có ý chí, nơi đó có con đường.
ý bạn thanlan nói dĩ nhiên là cách viết của Keil C rồi (luồng này đang viết về Keil C mà). mà bạn thanlan nói đúng rồi đấy, k hiểu sao bạn giotdang lại viết như vậy nhỉ ?

. chào mitvn, bạn thích học trên diễn đàn là điều rất đáng hoan nghênh, vì đó cũng là một cách học. chính mình cũng bắt đầu học như bạn đây.
. Nhưng muốn theo dõi luồng này tốt, bạn cần có kiến thức căn bản về C. Vì luồng này là "C cho vđk" nên bạn giotdang viết khá vắn tắt về C, chủ yếu là ôn lại thôi sau đó tập trung vào lập trình C cho vđk, trước mắt là 8051. tương tự, bạn ấy cũng không trình bày chi tiết về vdk, nên bạn sẽ thấy rất nhiều thắc mắc, mơ hồ là vậy. Vì thế mình mới khuyên bạn đọc trước về phần cứng vdk và C căn bản là thế.
. Bạn yên tâm đi, 8051 hay AVR hay PIC chung qui lại cũng là vdk 8bit, nên lập trình C cũng không khác nhau mấy. Bạn cứ ôn lại rồi theo dõi luồng này sẽ thấy rất bổ ích đấy ! wink
. Chúng ta thảo luận để cùng nhau tiến bộ mà, vì vậy nếu khi tìm hiểu gặp thắc mắc mình sẽ mở ra luồng mới về "C căn bản" hoặc "tìm hiểu về vdk" chẳng hạn, okie ? wink

AVR

Đây là bài đầu tiên của loạt bài về AVR. Sau khi kết thúc bài đầu tiên bạn dễ dàng lập trinh input và output cho AVR

Tóm tắt : Lập trình điều khiển led bật tắt ,sử dụng cách định nghĩa PIN và PORT ,cách dùng thư viện delay.h của codevision.


Giới thiệu:



Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng thái (0 1) từ đó ta có 4 kiểu vào ra cho một chân của avr.Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (mA) còn 89 chỉ là vài uA .
Để điều khiển các chân này chúng ta có 2 thanh ghi
->PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.n
->DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .Giá trị 1 là ra và 0 là vào .



Ví dụ 1 : Nhấp nháy lần lượt đèn xanh và đèn đỏ , khi ấn nút bấm chỉ có đèn đỏ sáng.
Phần cứng : đèn xanh PORTB.4 , đèn đỏ PORTB.5 , nút bấm PINB.7

Chú ý :
định nghĩa 1 chân là chân vào PIN x.x
#define nut_bam PINB.7
định nghĩa 1 chân là chân vào PORT x.x
#define den_do PORTB.5

Trong bài này PORT B có 2 biến đầu ra là PB5 và PB6
DDRB=0b00110000 =0x30
Khởi tạo chân PB7 cần được treo lên 5V , khi ấn nút bấm sẽ thông GND(0V) nên ta có PORTB=0b10000000=0x80;
Sau khi định nghĩa , nếu bạn den_do=1; đèn led đỏ sẽ tắt
den_do=0; đèn sẽ sáng .
( do cách thiết kế mạch đầu dương led nối 5V còn đầu âm nối vào VĐK)

delay.h có 2 cách gọi là trễ theo ms và us
delay_ms(time);
delay_us(time);


c code

1.

2.
/*****************************************************
3.
This program was produced by the
4.
CodeWizardAVR V1.24.8d Professional
5.
Automatic Program Generator
6.
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
7.
http://www.hpinfotech.com
8.

9.
Project :
10.
Version :
11.
Date : 12/27/2007
12.
Author : LENGOCTUAN
13.
Company : VAGAM
14.
Comments:
15.

16.

17.
Chip type : ATmega16
18.
Program type : Application
19.
Clock frequency : 8.000000 MHz
20.
Memory model : Small
21.
External SRAM size : 0
22.
Data Stack size : 256
23.
*****************************************************/
24.

25.
#include
26.
#include
27.

28.
// Declare your global variables here
29.

30.
#define den_xanh PORTB.5
31.
#define den_do PORTB.6
32.
#define nut_bam PINB.7
33.

34.
void main(void)
35.
{
36.

37.
// Port B initialization
38.
// Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
39.
// State7=T State6=0 State5=0 State4=T State3=T State2=T State1=T State0=T
40.
PORTB=0x80;
41.
DDRB=0x30;
42.

43.

44.

45.
while (1)
46.
{
47.
// Place your code here
48.
//khi nut bam chua duoc bam logic nut_bam=1
49.
if(nut_bam)
50.
{
51.
den_xanh=1;den_do=0;
52.
delay_ms(500);
53.
den_xanh=0;den_do=1;
54.
delay_ms(500);
55.
}
56.
//khi nut bam duoc an nut_bam=0 chi den do sang
57.
else
58.
{den_xanh=1;den_do=0;}
59.
};
60.
}
61.

62.

63.







Bạn gặp phải vấn đề dội nút nhấn. Điều gì xảy ra khi bạn nhấn nút ?

- Đặc tính dội: Thời gian dội nút từ 10ms đến 50ms (tùy loại nút)

Từ giản đồ, suy nghĩ hồi lâu wink , người ta nghĩ ra chiến thuật chống lại hiện tượng này:


Lưu đồ của bài toán bạn đặt ra như sau:

Mạch đèn giao thông bị lỗi khi reset IC đếm Read more: http://www.ant7.com/forum/forum_posts.asp?TID=8528&get=last#16864#ixzz10SXHa400

Tôi thiết kê mạch kiểu như sau :
-- 2 con 74192 kết nối với led để đếm giây
-- 2 con 4017 (con thứ 2 không có tác dụng ) đếm đến 70 con này để canh thời gian reset 2 con 74192 trên !
-- thời gian cho các đèn là xanh 30- vàng 5- đỏ 35
-- có 3 lần reset 74192 là: lúc 30 - lúc 35 - lúc 70
mình không hiểu sao 2 lần đầu là lúc 30, 35 thì đúng reset tốt. sau đó nó đếm 3s và reset kì lạ hơn là chân MR=0 ( đáng lẽ là không reset ) ! trong bài mình chỉ cho MR nối với một cổng OR 4 lối vào nên mãi vẫn không hiểu tại sao MR =0 mà nó reset được cả !
Click vào hình để xem ở kích thước nguyên gốc



Read more: http://www.ant7.com/forum/forum_posts.asp?TID=8528&get=last#16864#ixzz10SXA2CCy

VI ĐIỀU KHIỂN ĐÔC LẬP

139. Stand-alone Microcontroller


VI ĐIỀU KHIỂN ĐÔC LẬP

Chip 8051 là chip máy tính đầu tiên trên thị trường và tất cả các phiên bản sau nay với việc được tích hợp trên chip (ROM, EPROM hay EEPROM) có chức năng như một chip độc lập. Nó thường là bộ máy tính bao gồm các chip và một thạch anh, như với các 87C751.


khi bạn biết rằng thời gian để lập trình (OTP) cho các phiên bản của dòng 87C750 có chi phí khoảng 4$ với dung lượng nhỏ, bạn bắt đầu xem làm thế nào để có thể tạo ra một dòng chip được tích hợp nhiều ứng dụng mới. Nó có thể thay thế một vài chip logic, nhiều PLDs và thường là một số các thiết bị tương đương. Thay vì strug-Gling với một hằng số tích hợp lớn, bạn có thể thay thế một tín hiệu điện để chuyển đổi tần số cho các truy cập trên một chip đơn. Tuy nhiên một loạt các tính năng bổ sung có sẵn sẽ tương đối vô hiệu với các cổng được sử dụng. Nó có thể được tự điều chỉnh, nó có thể được tích hợp bất kỳ một số các khả năng khác để làm cho hệ thống hiệu quả hơn, dễ dàng hơn để điều chỉnh và dễ dàng hơn để sử dụng76.

Hầu hết chip 8051 được ứng dụng ngày nay sử dụng chip bổ sung để giải mã và truyền tải, cập nhật các dữ liệu tốt hơn. Mở rộng là sự lưa chọn đơn giãn nhất nếu bạn muốn kết quả hoạt động tốt nhất. Các sơ đồ trên trang kế tiếp cho thấy một chip đơn được mở rộng thêm phần giải mã đó là điều cần thiết cho bất kỳ ứng dụng bằng cách sử dụng 8031, mà không có trên chip ROM hoặc EPROM.77 Hạn chế lớn nhất của bộ nhớ mở rộng là việc mất ít nhất hai cổng 8-bit đến chức năng bus ra chip.78
Off chip code
Mở rộng thì chip bị hạn chế bởi địa chỉ ghép / dữ liệu thông tin về thấp hơn 8-bit (P0). Xem lạ icác biểu đồ thời gian. Để giữ byte địa chỉ thấp hơn cho đến khi CPU đã chuyển dữ liệu, bạn phải đưa nó vào phần cuối của địa chỉ này vẫn không thay đổi về P2 cho toàn bộ chu kỳ và bạn có thể sử dụng nó trực tiếp để giải mã địa chỉ. Các PSEN / tín hiệu cung cấp cho việc đọc hay cho phép (OE) tín hiệu vào CPU EPROM khi các ổ đĩa dữ liệu trên bus. Trong ví dụ đầu tiên, địa chỉ giải mã là không cần thiết. Vi chỉ có một EPROM CPU nên việc PSEN / tín hiệu truy cập vào mã trên chip đó.79 Việc sử dụng chân đệm A13 để CS / là một loại cho giải mã từ các dải địa chỉ ở chân đệm A13 ở mức cao sẽ không giải quyết các EPROM (hoặc bất cứ điều gì khác). Vì thế, các dải địa chỉ giải mã từ 0.000 qua 1FFF.80


Sơ đồ mạch thứ hai hiển thị trên trang kế tiếp là giống như sơ đồ mạch đầu tiên nhưng các sơ đồ mạch sau này chỉ chú trọng đến các bus của thông tin được truyền tải ở mỗi đường truyền.

Off mã chip, dữ liệu, và các cổng.
Khi bạn kết nối cổng hai, đó là một bước nhỏ để kết nối RAM bên ngoài, tăng thêm 2 bit cho RD và WR.81 Các sơ đồ kế tiếp cho thấy đó là một cựu hệ thống được mở rộng với việc thêm Ram và một cổng của chip 8255.82 Để lưu một bộ giải mã địa chỉ, bộ nhớ RAM là cơ sở lưu trữ trước tiên (0000) và 8255 địa chỉ đó được lưu ở hàng đầu. Nhìn vào 6.164, CSI / là kho dữ liệu, do đó, nó được ra khỏi hình ảnh (luôn cho phép). CS2 được kết nối với A13. Vì đầu vào ở mức cao đang hoạt động, A13 phải được tích hợp ở mức cao để thích hợp với chip 8255. Trong hệ nhị phân, để hệ thống có RAM từ 00100000 000000002 00111111 111111112 đến (200016 - 3FFF16). của 8255 chọn (CS) là hoạt động ở mức thấp, do đó, A13 phải được tích hợp ở mức thấp để lựa chọn chip.83 Đối với bất kỳ địa chỉ bit khi không kết nối các bit khác thường được nhận tín hiệu ở mức thấp, do đó chip 8255 chỉ sử dụng các bit bên trong A0 và A1, sẽ có địa chỉ từ 00000000 - 000000 002 (200016 - 3FF16).84



Việc phát triển RAM chiếm 2 bit của P3 cho RD / WR tín hiệu /. Cách viết chương trình cho RAM (RD / và WR /) thì khác với viết cho EPROM (PSEN) để giãi mã và chip dữ liệu có thể quay lại tại địa chỉ số tương tự.85


Off dữ liệu mã chip, bến cảng, và A-D
Cuối cùng, trên trang trước đó, là một ví dụ về cách thêm một thiết bị đặc biệt tương tự để chuyển đổi kỹ thuật số (AD, một thiết bị cung cấp cho một mã nhị phân liên quan đến việc cấp điện áp tại đầu vào) đó là một thiết bị 10-bit thể hiện trực tiếp qua giao diện. Việc đọc RDY/86 ở trong những địa chỉ có chứa các dữ liệu (các tín hiệu điện áp dưới dạng kỹ thuật số ở đầu vào analog) tai nhiều thời điểm khác nhau.
Dữ liệu được truyền tải liên tục qua các địa chỉ giải mã. Với một chip 8 K-byte RAM (cần 13bits cho một địa chỉ), chip chỉ nhận có 3 bit của địa chỉ , do đó chỉ có 3 đường dẫn dữ liệu trong số 138 đường dẫn. Chip 8255 được kích hoạt (một từ thấp đến dòng / CS) khi 74LS138 làm cho Y 3 thấp --- 0112 on CBA (chỉ khi có 0.112 trên A15-A13). Điều đó mang lại cho địa chỉ của 01100000 00000XX2 cho 825587. RAM ở đây được đặt ở địa chỉ dưới, 00000000 000000002 - 00011111 111111112 (000016 đến 1FFF16).
Giao diện D-A có một số hữu ích. Nó là một công cụ chuyển đổi 10-bit , để dữ liệu có thể đọc tất cả 8-bit trong một lần . Để có được CNV / xung thấp đòi hỏi WR / thấp trong khi A15-A13 là 0012, do đó để bắt đầu một chuyển đổi bất cứ dữ liệu gì thì địa chỉ là 400016. Khi việc chuyển đổi được thưc hiện RDY / sẽ ở mức thấp, do đó bạn có thể nhận thấy việc lưa chọn bit của INTO pin như P3.2-- bit tại địa chỉ B216, 88. Một khi dữ liệu được đọc dưới 8 bit địa chỉ 400016 và hai bit cao như 2 bit tại địa chỉ dưới 200016, 89.
Sau đó, bạn có thể viết mở rộng thêm nhưng có nhiều phức tạp. Một vài ví dụ sau cho thấy thêm nhiều hơn về các kho dữ liệu của bộ nhớ bị gián đoạn. mạch trở nên phức tạp hơn, nhưng các nguyên tắc hoạt động vẫn như cũ.
Port-Driven Peripherrals (LCD)



Thông thường bạn sẽ kết nối thiết bị với cổng chứ không phải là bỏ 16 hoặc 18 pins cần sử dụng cho các bus off-chip. Trên trang tiếp theo là một chữ số module LCD gắn với cổng của một 87C751 (một bus off-chip là không thể) .90

Các kết nối trực tiếp của LCD để bus mở rộng trong sơ đồ mạch sau. Để bắt đầu, thời hạn của tín hiệu kỹ thuật(ENA) là quá ngắn khi được tạo thành từ các tín hiệu RD hoặc WR của 8.051. Thật ra các chip điều khiển LCD nhanh hơn nhiều so với đặc điểm kỹ thuật của nó hoặc một loại nào khác có một giới hạn worts-cases đó không đạt được ở điều kiện thường trong mọi trường hợp, kết nối trực tiếp đã được hiển thị để làm việc.91 Thứ hai giới hạn trường hợp mà ENA hoạt động đồng thời với sự hoạt động của WR / tín hiệu. Các trick tìm một nguồn cho một thời gian trễ, có lẽ là một chuỗi các biến tần hoặc một chip khác kích hoạt đầu ra của tín hiệu OSC để có được một thời gian trễ trong chu kỳ hoạt động. Bạn nên kiểm tra các chi tiết kỹ thuật cho bất kỳ yêu cầu về thời gian . Một lần nữa, chip thực sự hoạt động, nhưng bạn có thể muốn có một thời gian trễ.92

Ghi chú

76Những vấn đề này Aer thảo luận chi tiết hơn nhiều trong cuốn sách, C và 8.051: xây dựng các ứng dụng hiệu quả.

77Mục đích ban đầu cho trên các phiên bản chip EPROM như 87C51 được cho mẫu thử nghiệm trước khi cam kết một nhà máy masked (mã cụ thể của bạn thường được xây dựng vào cụ thể của bạn, chạy custum sản xuất của chip 80C51).

78Nhiều thiết kế sử dụng các phiên bản EPROM với không có ý nghĩa của nhà máy sẽ đeo mặt nạ. Nhưng giá của 87C51 như không bao giờ bỏ EPROMs thường xuyên, do đó, trừ khi bạn cần tính năng chip duy nhất, sử dụng chip EPROM off.

79Đối với các ứng dụng duy nhất chip hiện nay có một ít chi phí một thời gian lập trình (OTP) phiên bản mà không có rõ ràng xóa sổ và do đó sử dụng ít tốn kém bao bì nhựa. Atmel đã có một dòng chip với EEPROM (bộ nhớ flash) mà tai chi phí hợp lý, nhưng bạn vẫn cần phải lưu trữ mã off-chip nếu không có đủ không gian mã chip.


80Bạn mất P2 và P0 (cộng với hai bit P3 cho RD / và WR / nếu bạn truy cập tắt RAM chip). Có một tùy chọn mở rộng bộ nhớ RAM chỉ sử dụng chỉ cần P0 anh hai bit của P3. Trong lắp ráp, RAM này được truy cập với MOVX bằng cách sử dụng @ R0 hoặc @ RI như con trỏ. Trong Keil / Franklin C bộ nhớ không gian này được gọi là pdata.

81Đó không phải là để nói rằng không có giải mã địa chỉ, nhưng tất cả phần còn lại của giải mã được các mạch trong EPROM cho rằng đường truyền đọc cho byte cụ thể trong chip để nhận tín hiệu 1 và 0 trên các chân địa chỉ của chip.
82Về mặt kỹ thuật phạm vi địa chỉ sẽ hồi đáp khi A15 và A14 được bỏ qua dải địa chỉ mà mã là 0000-1FFF, 4000-5FFF, 8.000-9FFF và C000-DFFF.
83Chân RAM sẽ được gắn vào trực tiếp với các cổng logic để sử dụng RAM chung loại với một địa chỉ riêng biệt chốt mặc dù có chip intel 8.155 cung cấp các chốt và các cổng cùng với RAM. Đối với ba cổng, nó là vô cùng phổ biến để sử dụng chip 8.255 cổng 40pin. 8 bit đơn giản cho một cổng đầu ra và bit 8 tristate bộ đệm cho một trong các cảng đặt là một tùy chọn là tốt.
84Một chip 8.255 cung cấp ba cổng 8 bit bên ngoài không có các chi tiết bên trong. Thuật ngữ này được ghi chú và được hiển thị bằng một thanh công cụ hoặc trên đầu trang của các biểu tượng hoặc sau khi các biểu tượng. Các thanh công thì dễ sử dụng hơn nếu bạn tìm hiểu những chi tiết của 8255, 4 địa chỉ cho các I / O chip là: Porta = 0x0000, PortB = 0x0001, PortC = 0x0002 và CMD = 0x0003.

85Nhìn vào các mạch mở rộng được mô tả trong phụ lục A4, để thấy rằng nó có logic OR, các PSEN và RD để một chương trình có thể tải về mã dữ liệu. Bộ xử lý sau đó có thể hoạt động trên đó và tải về mã dữ liệu. Việc tải về mã dữ liệu sẽ giúp ích cho việc mở rông và sữa lỗi, nhưng nó là "gian lận" từ dữ liệu và không gian mã có nghĩa vụ phải được tách biệt và có thể nếu không chồng chéo lên nhau ở địa chỉ số.

86RDY / có thể là một tín hiệu vào vi điều khiển cho biết khi chuyển đổi, một quá trình có thể mất hàng chục hàng trăm micro giây, được thực hiện. Bằng văn bản cho pin / các CNV kể AD để bắt đầu quá trình chuyển đổi.
87the số 0 nghiêng là dành cho tôi không quan tâm, mà không được giải mã và chỉ cũng có thể là số 1. trong 8.255 địa chỉ ưa thích là: Porta = 0x6000, PortB = 0x6001, PortC = 0x6002, và CMD = 0x6003.
88you cũng có thể sử dụng, làm gián đoạn thảo luận sau này. Với 8.051 gia đình, làm gián đoạn có thể được thực hiện cạnh tiêu cực gây ra, do đó, đây là phân cực phải.
89This có thể không có giao diện thân thiện cho chương trình nhưng, một khi bạn đã figured nó ra, bạn có thể chôn vùi các chi tiết trong một hàm và có được dữ liệu mà không có một ý nghĩ thứ hai.
90The phần mềm để sử dụng màn hình LCD như thể hiện được trên trang 177

91Trong một ứng dụng thương mại, tôi sẽ không muốn dựa vào tình hình như vậy mà không cần biết thêm thông tin từ các nhà sản xuất.

92Phần mềm để sử dụng màn hình LCD được hiển thị trên trang 177.



Đọc và tiềm hiểu thêm:

1. Cho ví dụ về một chỉ dẫn C, hướng dẫn một hội đồng, và hướng dẫn một máy.
2. phác thảo một sơ đồ chung của kiến trúc của máy tính hiển thị bộ nhớ, I / O, CPU, và busses.
3. Điều gì làm cho một 8.051 một "8-bit micro"?
4. sử dụng các kỹ thuật của chương này, bạn có thể tìm ra địa chỉ của các PU552 và Ban MCB520 tại Phụ lục A5? Vì bạn không thể anter các PLD vào thứ hai, bạn có thể tìm thấy manh mối gì cho các địa chỉ?
5. trong bộ giải mã địa chỉ khác nhau bằng cách sử dụng 74.138, những gì sẽ là địa chỉ bốn nếu bạn đảo ngược các connectons đến chân 1 và 2? Nó sẽ được xấu để không đặt tại địa chỉ 0.000 EPROM?
6. tại sao là năng động RAM ít khi được sử dụng với vi điều khiển?
7. Là một đăng ký khác nhau từ một vị trí nhớ? Giải thích.
8. quy tắc hồng y khi sử dụng một cổng 8.051 iternal cho đầu vào là những gì?
9. Làm thế nào để bạn chuyển đổi một số bổ sung của 1 đến 2 của bổ sung?
10. tối thiểu tuyệt đối bạn cần để thêm vào một vi điều khiển "" single-chip để có nó làm việc là gì?
11. Miêu tả hai sử dụng cho các tín hiệu ALE.
12. Với một tinh thể 12 MHz, làm thế nào lâu để thực hiện nhanh nhất 8.051 hướng dẫn?
13. các "chi phí lớn" mở rộng bộ nhớ RAM của 8.051 là gì?
14. Có bất kỳ hướng dẫn bạn phải ra trước khi sử dụng hai chân của P3 là RD / và WR /?
15. Với off chip RAM thuộc, những gì sẽ xảy ra nếu bạn viết một byte toàn bộ ra cổng P3?
16. Căn cứ theo biểu đồ thời gian trên trang 29, khi là P0 đưa ra địa chỉ và khi nào là nó hendling dữ liệu hoặc mã?
17. tại sao bạn có thể sử dụng các thành viên khác của gia đình 8.051? Những tính năng nổi bật trong tâm trí của bạn?
18. tại sao bạn sẽ sử dụng một ban thương mại với hơn 8.051 dây lên của riêng bạn? Khi có bạn không làm như vậy? Tại sao?

http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

LED ma trận hiển thị chữ

BÀI TIỂU LUẬN

LED MA TRẬN HIỂN THỊ CHỮ



1. Đề bài:

Dùng vi xử lý điều khiển dòng chữ “TRUONG ĐAI HOC CONG NGHIEP TP.HCM – KHOA CONG NGHE ĐIEN TU – SVTH: LUU TIEN ĐAT – MSSV: 0502039” chạy từ phải sang trái và hiển thị trên led ma trận màu đỏ.

2. Phân tích đề bài:

2.1 Phân tích:

- Hiển thị chữ trên led ma trận màu đỏ.

- Dòng chữ chạy từ phải sang trái.

- Dùng port 1 điều khiển cột và port 2 điều khiển dòng trên led ma trận.

- Khi port 1.0 ở mức cao, port 2 điều khiển cột led thứ 1 sáng tương ứng với giá trị port của 2 – delay5ms.

- Khi port 1.1 ở mức cao, port 2 điều khiển cột led thứ 2 sáng tương ứng với giá trị của port 2 – delay5ms.

- …

- Khi port 1.7 ở mức cao, port 2 điều khiển cột led thứ 8 sáng tương ứng với giá trị của port 2 – delay5ms.

Nhận xét: port 1 dịch bit từ phải sang trái, port 2 load dữ liệu liên tục nên dùng vòng lặp.



Click vào hình để xem ở kích thước nguyên gốc



Click vào hình để xem ở kích thước nguyên gốc



Click vào hình để xem ở kích thước nguyên gốc

2.2 Sơ đồ nguyên lý:



Click vào hình để xem ở kích thước nguyên gốc

2.3 CODE:



$MOD51

ORG 00H

MAIN:

MOV DPTR,#DATABASE ;DIA CHI NAP DU LIEU

AAA:

MOV R0,#5 ;TOC DO HIEN KY TU

BBB:

LCALL SCANDATA ;NAP DU LIEU

DJNZ R0,BBB

INC DPTR

MOV A,DPL

MOV R1,DPH

CJNE R1,#02H,AAA ;KIEM TRA KET THUC CHUOI ?

CJNE A,#25H,AAA

SJMP MAIN





SCANDATA:

PUSH ACC

PUSH 00H

PUSH 01H

MOV R0,#00H ;DIA CHI DU LIEU DAU TIEN TRON DATABASE

MOV R1,#01H ;HIEN THI RA COT DAU TIEN

SCAN:

MOV A,R0

MOVC A,@A+DPTR ;NAP DU LIEU TU DATABASE VAO A

MOV P2, A ;HIEN THI RA DONG TUONG UNG

MOV P1,R1 ;HIEN THI RA COT DAU TIEN

LCALL DELAY5MS ;CHUONG TRINH TAO TRE 5 MS

MOV R4,#40H ;CHONG LEM

MOV P1,#00H

DJNZ R4,DDD

INC R0 ;HIEN THI DU LIEU KE TIEP

MOV A,R1 ;CHUYEN SANG COT KE TIEP

RL A

MOV R1,A

CJNE R0,#8H,SCAN ;KIEM TRA QUET COT THU 8 CHUA

POP 01H

POP 00H

POP ACC

RET



DELAY5MS:

PUSH 00H

PUSH 01H

MOV R1,#10

CCC:

MOV R0,#250

DJNZ R0,$

DJNZ R1,CCC

POP 01H

POP 00H

RET



DATABASE:

DB 00H,00H,00H,00H,00H,00H ;"KHOANG TRANG"

DB 02H,02H,0FEH,02H, 02H,00H ;"T"

DB 0FEH,12H, 32H,52H, 8CH,00H ;"R"

DB 7EH,80H, 80H,80H, 7EH,00H ;"U"

DB 7CH,82H, 82H,82H, 7CH,00H ;"O"

DB 0FEH,04H, 08H,10H,0FEH,00H ;"N"

DB 7CH,82H, 92H,92H, 74H,00H,00H,00H ;"G"



DB 10H,0FEH,92H,82H, 82H,7CH,00H ;"D"

DB 0FCH, 22H,22H,22H,0FCH,00H ;"A"

DB 82H,0FEH,82H,00H, 00H,00H ;"I"



DB 0FEH,10H,10H,10H,0FEH,00H ;"H"

DB 7CH,82H,82H,82H, 7CH,00H ;"O"

DB 7CH,82H,82H,82H, 44H,00H,00H,00H ;"C"



DB 7CH,82H,82H,82H, 44H,00H ;"C"

DB 7CH,82H,82H,82H, 7CH,00H ;"O"

DB 0FEH,04H,08H,10H,0FEH,00H ;"N"

DB 7CH,82H,92H,92H, 74H,00H,00H,00H ;"G"



DB 0FEH, 04H,08H,10H,0FEH,00H ;"N"

DB 7CH, 82H,92H,92H, 74H,00H ;"G"

DB 0FEH, 10H,10H,10H,0FEH,00H ;"H"

DB 82H,0FEH,82H,00H ;"I"

DB 0FEH, 92H,92H,92H, 82H,00H ;"E"

DB 0FEH, 12H,12H,12H, 0CH,00H,00H,00H ;"P"



DB 02H,02H,0FEH,02H, 02H,00H ;"T"

DB 0FEH,12H, 12H,12H, 0CH,00H ;"P"

DB 80H,00H ;"."

DB 0FEH,10H, 10H,10H,0FEH,00H ;"H"

DB 7CH,82H, 82H,82H, 44H,00H ;"C"

DB 0FEH,04H, 08H,04H,0FEH,00H,00H ;"M"



DB 10H,10H,10H,00H,00H ;"-"



DB 0FEH,10H,28H,44H, 82H,00H ;"K"

DB 0FEH,10H,10H,10H,0FEH,00H ;"H"

DB 7CH,82H,82H,82H, 7CH,00H ;"O"

DB 0FCH,22H,22H,22H,0FCH,00H,00H,00H ;"A"



DB 7CH,82H,82H,82H, 44H,00H ;"C"

DB 7CH,82H,82H,82H, 7CH,00H ;"O"

DB 0FEH,04H,08H,10H,0FEH,00H ;"N"

DB 7CH,82H,92H,92H, 74H,00H,00H,00H ;"G"



DB 0FEH,04H,08H,10H,0FEH,00H ;"N"

DB 7CH,82H,92H,92H, 74H,00H ;"G"

DB 0FEH,10H,10H,10H,0FEH,00H ;"H"

DB 0FEH,92H,92H,92H, 82H,00H,00H,00H ;"E"



DB 10H,0FEH,92H,82H, 82H,7CH,00H ;"D"

DB 82H,0FEH,82H,00H ;"I"

DB 0FEH, 92H,92H,92H, 82H,00H ;"E"

DB 0FEH, 04H,08H,10H,0FEH,00H,00H,00H ;"N"



DB 02H,02H,0FEH,02H,02H,00H ;"T"

DB 7EH,80H, 80H,80H,7EH,00H,00H ;"U"



DB 10H,10H,10H,00H,00H ;"-"



DB 4CH,92H, 92H,92H, 64H,00H ;"S"

DB 3EH,40H, 80H,40H, 3EH,00H ;"V"

DB 02H,02H,0FEH,02H, 02H,00H ;"T"

DB 0FEH,10H, 10H,10H,0FEH,00H ;"H"

DB 44H, 00H,00H ;":"



DB 0FEH,80H,80H,80H,80H,00H ;"L"

DB 7EH,80H,80H,80H,7EH,00H ;"U"

DB 7EH,80H,80H,80H,7EH,00H,00H,00H ;"U"



DB 02H, 02H,0FEH,02H, 02H,00H ;"T"

DB 82H,0FEH, 82H,00H ;"I"

DB 0FEH, 92H, 92H,92H, 82H,00H ;"E"

DB 0FEH, 04H, 08H,10H,0FEH,00H,00H,00H ;"N"



DB 10H,0FEH, 92H,82H, 82H,7CH,00H ;"D"

DB 0FCH, 22H, 22H,22H,0FCH,00H ;"A"

DB 02H, 02H,0FEH,02H, 02H,00H,00H,00H ;"T"



DB 10H,10H,10H,00H,00H ;"-"



DB 0FEH, 04H, 08H,04H,0FEH,00H ;"M"

DB 4CH, 92H, 92H,92H, 64H,00H ;"S"

DB 4CH, 92H, 92H,92H, 64H,00H ;"S"

DB 3EH, 40H, 80H,40H, 3EH,00H ;"V"

DB 44H, 00H ;":"



DB 7CH, 82H, 82H,82H,7CH,00H ;"0"

DB 4EH, 8AH, 8AH,8AH,72H,00H ;"5"

DB 7CH, 82H, 82H,82H,7CH,00H ;"0"

DB 8CH,0C2H,0A2H,92H,8CH,00H ;"2"

DB 7CH, 82H, 82H,82H,7CH,00H ;"0"

DB 44H, 92H, 92H,92H,6CH,00H ;"3"

DB 4CH, 92H, 92H,92H,7CH,00H,00H,00H ;"9"



END



3. KẾT QUẢ MÔ PHỎNG:

Chữ T và Đ hiển thị trên led ma trận:



sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.


Mạch LED sáng dần thay đổi kiểu rồi tắt Read more: http://www.ant7.com/forum/forum_post.asp?TID=1195#ixzz10SVnkWRb

Nội dung:Mạch này sẽ làm cho đèn Led sáng dần thay đổi kiểu rồi tắt rất đẹp.

Click vào hình để xem ở kích thước nguyên gốc

Chương trình mạch điện viết bằng assembly:

ORG 0H

AJMP START

INITIALIZE : ; ; ; ;SET UP CONTROL REGISTERS

;

MOV TCON,#00H

MOV TMOD,#00H

MOV PSW,#00H

MOV IE,#00H ; ; ; ;DISABLE INTERRUPTS

RET

DELAYMS:

;

MOV R7,#00H

LOOPA:

INC R7

MOV A,R7

CJNE A,#0FFH,LOOPA

RET

DELAYHS:

MOV R6,#00H

LOOPB:

INC R6

ACALL DELAYMS

MOV A,R6

JNZ LOOPB

RET

START:

ACALL INITIALIZE

LOOP:

INC P1

ACALL DELAYHS

AJMP LOOP

END

http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

ĐÈN LED CHỚP VỚI 89C51

Nội dung:Điều duy nhất mà Tôi muốn làm mạch này là:làm cho Led chớp.Bạn có thể nhấn vào link dể xem sơ đồ mạch điện:
 http://img114.imageshack.us/img114/9242/hinhdh2.png
   Sau đây là chương trình mạch điện viết bằng ngôn ngữ assembly:
   ORG 0030H
   LOOP :
      CLR    P1.0    ;P1.0  SANG
      CALL  DELAY_1S
      SETB  P1.0    ;P1.0  TAT
      CALL  DELAY_1S
      LJMP  LOOP
   DELAY_1S :
      MOV   R1,#20
      LOOP1 :        MOV R2,#200
      LOOP2 :        MOV R3,#255
      LOOP3 :        DJNZ R3,LOOP3
      DJNZ   R2,LOOP2
      DJNZ   R1,LOOP1
      RET
   END


Read more: http://www.ant7.com/forum/forum_post.asp?TID=1213#ixzz10SVFc190



http://soundandlightvn.blogspot.com
sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

keil C Programming Tutorial: Functions



keil C Programming Tutorial: Functions
►Functions in Keil C

Keil C compiler provides number of extensions for standarad C function declerations. These extensions allows you to:
  • Specify a function as an interrupt procedure

  • Choose the register bank used

  • Select memory model



►Function Declaration:

[Return_type] Fucntion_name ( [Arguments] ) [Memory_model] [reentrant] [interrupt n] [using n]

Return_type: The type of value returned from the function. If return type of a function is not specified, int is assumed by default.

Function_name: Name of function.

Arguments: Arguments passed to function.


Options:
These are options that you can specify along with function declaration.
Memory_model: explicit memory model (Large, Compact, Small) for the function. Example:

CODE:
int add_number (int a, int b) Large


reentrant: To indicate if the function is reentrant or recursive. This option is explained later in the tutorial.

interrupt: Indicates that function is an interrupt service routine. This option is explained later in the tutorial.

using: Specify register bank to be used during function execution. We have three register banks in 8051 architecture. These register banks are specified using number 0 for Bank 0 to 3 for Bank 3 as shown in example

CODE:
void function_name () using 2{ //function uses Bank 2
        //function code
}



►Interrupt Service Routines:
A function can be specified as an interrupt service routine using the keyword interrupt and interrupt number. The interrupt number indicates the interrupt for which the function is declared as service routine.

Following table describes the default interrupts:



8051 Interrupt vector

As 8051 vendors create new parts, more interrupts are added. Keil C51 compiler supports interrupt functions for 32 interrupts (0-31). Use the interrupt vector address in the following table to determine the interrupt number.



Interrupt vector

The interrupt function can be declared as follows:

CODE:
void isr_name (void) interrupt 2 {
// Interrupt routine code
}


Please make sure that interrupt service routines should not have any arguments or return type except void.


►Reentrant Functions:
In ANSI C we have recursive function, to meet the same requirement in embedded C, we have reentrant function. These functions can be called recursively and can be called simultaneously by two or more processes.

Now you might be thinking, why special definition for recursive functions?
Well you must know how these functions work when they are called recursively. when a function is running there is some runtime data associated with it, like local variables associated with it etc. when the same function called recursively or two process calls same function, CPU has to maintain the state of function along with its local variables.

Reentrant functions can be defined as follows:
CODE:
void function_name (int argument) reentrant {
        //function code
}


Each reentrant function has reentrant stack associated with it, which is defined by startup.A51 file. Reentrant stack area is simulated internal or external memory depending upon the memory model used:

  • Small model reentrant functions simulate reentrant stack in idata memory.

  • Compant model reentrant functions simulate reentrant stack in pdata memory.

  • Large model reentrant functions simulate reentrant stack in xdata memory.




►Real-time Function Tasks:

Keil or C51 provides support for real-time operating system (RTOS) RTX51 Full and RTX51 Tiny. Real-time function task are declared using _task_ and _priority_ keywords. The _task_ defines a function as real-time task. The _priority_ keyword specify the priority of task.

Fucntions are declared as follows:

CODE:
void func (void) _task_ Number _priority_ Priority {
        //code
}

where:

Number: is task ID from 0 to 255 for RTX51 Full and 0 to 15 for RTX51 Tiny.

Priority: is priority of task.

Real-time task functions must be declared with void return type and void argument list (say no arguments passed to task function).
►Basic of a C program

As we already discussed, Keil C is not much different from a normal C program. If you know assembly, writing a C program is not a problem, only thing you have to keep in mind is forget your controller has general purpose registers, accumulators or whatever. But do not forget about Ports and other on chip peripherals and related registers to them.

In basic C, all programs have atleast one function which is entry point for your application that function is named as "main" function. Similarly in keil, we will have a main function, in which all your application specific work will be defined. Lets move further deep into the working of applications and programs.

When you run your C programs in your PC or computer, you run them as a child program or process to your Operating System so when you exit your programs (exits main function of program) you come back to operating system. Whereas in case of embedded C, you do not have any operating system running in there. So you have to make sure that your program or main file should never exit. This can be done with the help of simple while(1) or for(;;) loop as they are going to run infinitely. Following layout provides a skeleton of Basic C program.

CODE:
void main(){
//Your one time initialization code will come here
        while(1){
                //while 1 loop
                //This loop will have all your application code
                //which will run infinitely
        }
}


When we are working on controller specific code, then we need to add header file for that controller. I am considering you have already gone through "Keil Microvision" tutorial. After project is created, add the C file to project. Now first thing you have to do is adding the header file. All you have to do is right click in editor window, it will show you correct header file for your project.

Figure below shows the windows context for adding header file to your c file.



include file

►Writing Hardware specific code

In harware specific code, we use hardware peripherals like ports, timers and uart etc. Do not forget to add header file for controller you are using, otherwise you will not be able to access registers related to peripherals.

Lets write a simple code to Blink LED on Port1, Pin1.

CODE:
#include //header file for 89C51
void main(){
        //main function starts
        unsigned int i;
        //Initializing Port1 pin1
        P1_1 = 0; //Make Pin1 o/p
        while(1){
                //Infinite loop main application
                //comes here
                for(i=0;i<1000;i++)
                        ; //delay loop
                P1_1 = ~P1_1;
                //complement Port1.1
                //this will blink LED connected on Port1.1
        }
}


You can now try out more programs. "Practice makes a man perfect".
In next section of this tutorial, we will learn how to mix C and assembly codes.
►Interfacing C program to Assembler

You can easily interface your programs to routines written in 8051 Assembler. All you need to do is follow few programming rules, you can call assembly routines from C and vice-versa. Public variables declared in assembly modules are available to your C program.

There maybe several reasons to call an assembly routine like faster execution of program, accessing SFRs directly using assembly etc. In this part of tutorial we will discuss how to write assembly progarms that can be directly interfaced with C programs.

For any assembly routine to be called from C program, you must know how to pass parameters or arguements to fucntion and get return values from a function.


►Segment naming

C51 compiler generates objects for every program like program code, program data and constant data. These objects are stored in segments which are units of code or data memory. Segment naming is standard for C51 compiler, so every assembly program need to follow this convention.

Segment names include module_name which is the name of the source file in which the object is declared. Each segment has a prefix that corresponds to memory type used for the segment. Prefix is enclosed in question marks (?). The following is the list of the standard segment name prefixes:



C51 module prefix

►Data Objects:

Data objects are the variables and constants you declare in your C programs. The C51 compiler generates a saperate segment for each memory type for which variable is declared. The following table lists the segment names generated for different variable data objects.



Data objects segment prefix

►Program Objects:

Program onjects includes code generated for C programs functions by C51 compiler. Each function in a source module is assigned a separate code segment using the ?PR?function_name?module_name naming convention. For example, for a function name send_char in file name uart.c will have a segment name of ?PR?SEND_CHAR?UART.

C51 compiler creates saperate segments for local variables that are declared within the body of a function. Segment naming conventions for different memory models are given in following tables:



Small model segment naming convention




Compact model segment naming convention




Large model segment naming convention

Function names are modified slightly depending on type of function (functions without arguments, functions with arguments and reentrant functions). Following tables explains the segment names:



function segment naming convention


In next section we will learn regarding defining functions which can be called from any C function and how a C function can be called from assembly.
►Function Parameters

C51 make use of registers and memory locations for passing parameters. By default C function pass up to three parameters in registers and further parameters are passed in fixed memory locations. You can disable parameter passing in register using NOREGPARMS keyword. Parameters are passed in fixed memory location if parameter passing in register is disabled or if there are too many parameters to fit in registers.


►Parameter passing in registers

C functions may pass parameter in registers and fixed memory locations. Following table gives an idea how registers are user for parameter passing.



parameter passing to functions

Following example explains a little more clearly the parameter passing technique:



example parameter passing to functions



►Parameter passing in Fixed Memory Locations

Parameters passed to assembly routines in fixed memory lcoation use segments named

?function_name?BYTE : All except bit parameters are defined in this segment.

?function_name?BIT : Bit parameters are defined in this segment.

All parameters are assigned in this space even if they are passed using registers. Parameters are stored in the order in which they are declared in each respective segment.

The fixed memory locations used for parameters passing may be in internal data memory or external data memory depending upon the memory model used. The SMALL memory model is the most efficient and uses internal data memory for parameter segment. The COMPACT and LARGE models use external data memory for the parameter passing segments.


►Fucntion Return Values

Function return values are always passed using CPU registers. The following table lists the possible return types and the registers used for each.



function return values


►Example

Following example shows how these segment and function decleration is done in assembler.

CODE:
;Assembly program example which is compatible
;and called from any C program
;lets say asm_test.asm is file name
name asm_test

;We are going to write a function
;add which can be used in c programs as
; unsigned long add(unsigned long, unsigned long);
; as we are passing arguments to function
;so function name is prefixed with '_' (underscore)

;code segment for function "add"
?PR?_add?asm_test segment code
;data segment for function "add"
?DT?_add?asm_test segment data

;let other function use this data space for passing variables
public ?_add?BYTE
;make function public or accessible to everyone
public _add

;define the data segment for function add
rseg ?DT?_add?asm_test
?_add?BYTE:
parm1:  DS 4    ;First Parameter
parm2:  ds 4    ;Second Parameter

;either you can use parm1 for reading passed value as shown below
;or directly use registers used to pass the value.
rseg ?PR?_add?asm_test
_add:
;reading first argument
        mov parm1+3,r7
        mov parm1+2,r6
        mov parm1+1,r5
        mov parm1,r4
;param2 is stored in fixed location given by param2

;now adding two variables
        mov a,parm2+3
        add a,parm1+3
;after addition of LSB, move it to r7(LSB return register for Long)
        mov r7,a
        mov a,parm2+2
        addc a,parm1+2
;store second LSB
        mov r6,a
        mov a,parm2+1
        addc a,parm1+1
;store second MSB
        mov r5,a
        mov a,parm2
        addc a,parm1
;store MSB of result and return

;keil will automatically store it to
;varable reading the resturn value
        mov r4,a
        ret

        end

Now calling this above function from a C program is very simple. We make function call as normal function as shown below:

CODE:
extern unsigned long add(unsigned long, unsigned long);

void main(){
        unsigned long a;
        a = add(10,30);
        //a will have 40 after execution
        while(1);
}









sưu tầm và biên tập từ nhiều nguồn, mọi ý kiến về kỹ thuật xin vui long liên hệ
soundandlightvn@gmail.com – 0906 715 077 rất mong được đóng góp của các độc giả.

Easy-DownloaderV1.1 forATMEL 89C2051/4051

Build your own a personal writer forprogramming HEX code into Flash based microcontroller AT89C2051(2k) andAT89C4051(4k). Simple hardware and Easy use software in DOS and Windowversion. Single-side and double side PCB files included.sourcecode with sdcc version!

Introduction
The first version of the Easy-Downloaderwas designed in 1997 to be used as a tool for my students on building her/hisown microcontrollers circuit in the class " Designing Microprocessors System".The circuit features low-cost and easy use. The latest version V1.1 wasdesigned to be used with 2051 and the newest 4051 chips. There is no separatefunctions like other programmer e.g., blank check, erase, write. Simplytype say, c:\..>ez hello , the hex file "hello.hex" will then be programmedto the chip automatically. If the chip is not blank or the code is locked,it will erase first, then write and verify... that all.
Hardware
Figure 1 shows a circuit diagramof the Easy-Downloader. As shown, the circuit uses a 89C2051 with writer.hexfirmware, 74LS373 8-bit latch, DS275-like, 7805, LM317 and two transistors,2N2222A and 2N2907A. The programming voltage control circuit is the sameas recommended by ATMEL application note. It can be raised from 0V, 5Vand 12V by appropriated signal from P3. The 8-bit latch, 74LS373 providessome signal for selecting the programming modes. A byte to be programmedor read back is sent/received through P1. Incrementing address is doneby pulsing a positive pulse to XTAL pin. The circuit may be built usingsimple point-to-point soldering with a general purpose PCB( fish's egglike PCB) or making PCB shown above, the file is Easy-v1.pcbProtel PCB version 2.76. The finished board should be tested without anychips; 1) +5V supply, 2) programming voltage 0V, 5V and 12V by connectingthe pin that control (P3.5 and D) 2N2222A and 2N2907 to +5V and/or GND.The adapter output should be approx. 15Vdc 100mA.


Figure1: Circuit Diagram of Easy-Downloader V1.1

AcrobatPCB Files

Assuggested by a friend from Romania, Puiu Chiselita, to provide PCB imagein Acrobat file, so I have asked my friend, Jaroon Keawkhrua. He made withinan hour, thanks again for providing us, the Acrobat PCB file.

TOPLAYER (80kB) easy-v2t.pdf
BOTTOMLAYER (36kB) easy-v2b.pdf
COMPONENTLAYER (51kB) easy-v2o.pdf

Software

Two files that you shouldget are: writer.hex 4,871 bytes, the intelhex file firmware for 89C2051 chip ( the actual code size is 2021 bytes)and, ez.exe 20,800 bytes the uploader programrun on PC, send hex file to the downloader. The original writer.cprogram was written in 'C'. To modify, it needs Micro C-compiler from DunfieldDevelopment System Ontario Canada with tiny memory model.

Functional Test
Use a given programmer (or readymade Easy-Downloader) write the writer.hex into the 2051 chip. Put theprogrammed 2051 chip to the board. Invoke any communication software with9600 baud, 8-data bit, no parity. Connect DB-9 to COM1, say, press enterkey, the title "Easy-Downloader V1.1 for ATMEL 89C2051/4051" would be appearedon the screen. type >s2048 ( set byte counter to 2k), then without the2051 chip in ZIF, type >r (read 2kB), on screen would show FFFFFFFFFFF...indicating corrected wiring for P1. If you put the chip having alreadyprogram inside, r command will show the hex code with the number of byteset by s command. Try e command to erase the entire program!! All done.Figure 2 shows example of using Xtalk program to test the board.


Figure2: Using Xtalk to test the board

Now try with "ez"the uploader program to help you more easy to write the hex file to thechip. Example of using ez is shown in Figure 3. Have fun...

Note: EZ3 can use only withold PC that runs dos, for new PC try with window version!


Figure3: Example of using EZ program writes the writer.hex to 2051 chip

Figure4: Example of Using EZ3 and EZ3.1

DownloadEZUploader V3.0 for Window The EZ Uploader provides a simplemeans of sending HEX file to the writer board. To connect the board withEZ, click available COM port, COM1, say. After the EZ recognizes the chips,then click Send Hexfile, that all. Since there is no signature byte thatindicates chip number and programming voltage, thus you have to choosethe appropriated memory size either 2051 or 4051 manually, i.e., 2048 or 4096 respectively.

DownloadEZUploader V3.1 for Window An upgraded version of EZ3with RAED and SAVE AS features for reading HEX code resided in the chipandsave as an Intel HEX file.
Tips
HEX fileextension
Some Assembler or Compiler produceoutput hex file with .OBJ instead of .HEX. The EZ needs .HEX extension,just rename it...
ExpensiveZIF Socket
Without expensive ZIF socket,you may use an ordinary socket instead, surely many times of pulling thechips may cause the far end leg of the 2051 chip broken. My student suggestsme to insert one more socket to the 2051 chip. It works very nice. Eventhe programmer has ZIF, but your application board does not have. Betterto insert one socket to strengthen the 2051's leg.
DC Adapter
Any DC adapters, fixed or adjustablecan be used, a bridge diode corrects polarity for the regulator IC eventually.Many adapters provide higher DC output than the value labeled, to ensure,check the proper programming voltage that must be in the range of 11.5to 12.5V.
Put theRight Position
The latest version does notinclude the protection circuit if putting wrong position, i.e., GND-Vcc<--> Vcc-GND.

Thus before put the chipinto the programmer or your application board, back to see your thought,say I am putting the 2051 chip to the right position, then pick the chip,and place it...
89C1051
There is no problem with 89C1051chip but ensure that the hex code size must less than 1024 bytes (000Hto 3FFH). While verifying after erase it showed 0 to 2048 byte as the 2051chip, it means twice reading, i.e., 000H-3FFH then 000H-3FFH, the samephysical address. When programming, the control chip will write and verifyonly the size of program.

Easy 1.1 Links

* MakeYour Own Single-Side PCB for Easy-Downloader V1.1
* RS232CLevel Converter A circuit for RS232C level converter, MAX232and DS275.
* Experimentingthe 2051 with C Programming

Sourcecode for sdcc
I spent my weekend modifiedthe source code of Easy downloader V1.1 for sdcc! Now you may study thecode to see how it works with a nice tool available freely for everyone,the small device c compiler, sdcc. The compiled code is very nice and isvery compact. You may noticed that the size of new firmware is only 1128bytes!

Download the source code,WRITER1.C, hex file, writer1.hex and the compiler,SDCC.zip

Below is a sample how touse sdcc.

C:\sdcc\app>s

C:\sdcc\app>path=c:\sdcc\bin

C:\sdcc\app>sdcc writer1.c

library file /sdcc/share/sdcc/lib/small/libsdcc.lib
library file /sdcc/share/sdcc/lib/small/libint.lib
library file /sdcc/share/sdcc/lib/small/liblong.lib
library file /sdcc/share/sdcc/lib/small/libfloat.lib

C:\sdcc\app>packihx writer1.ihx>writer1.hex
packihx: read 166 lines, wrote 75:OK.

C:\sdcc\app>

The batch file s.bat contains,

path=c:\sdcc\bin
sdcc writer1.c
packihx writer1.ihx>writer1.hex

The output machine code ishex file with *.ihx extension. We can use a tool, packihx to convert suchhex file with *.ihx to *.hex easily.

The ez4.1 is suitable forprogramming the hex file into a 20-pin microcontrollers, 89C2051/4051.Since the hex file produced by sdcc is not sorted from low address to highaddress. The old version, EZ31 has bug for such hex file. So I recommenedto use EZ4.1 for program loading. Click at the picture to download EZ4.1!

Contributionto Easy Programmer V1.1

* PROGRAMM.PCB Layout made by Hooman Falahati , from IRAN.