10 4.104 8051 9 Acquy adc pic All datasheet ALTIUM Altium Designer AM-FM Arduino ARM ARM là gì Ấn Tượng Bản tin công nghệ Bản tin Thiết Bị Số Barobo bất động sản biến Binary Bit board lpc2378 Bộ chuyển đổi ADC Bộ Đếm Bộ điều khiển cửa cuốn Bộ Định Thời Buy Khóa Số Điện Tử Buy Mạch đếm sản phẩm Buy Mạch giao thông Buy Mạch nạp Buy Matrix Byte C cho AVR các hàm vào ra các loại lõi arm các mạch DAC cơ bản các ngắt trong pic Cách đọc điện trở Cách Đọc Giá Trị Điện Trở Cách đọc giá trị tụ điện Cách hàn linh kiện dán cách làm mạch khóa số cách tạo linh kiện dán cad/cam Cài Đặt cài đặt proteus 8 cảm biến Cấu Kiện Logic Khả Trình cấu tạo cấu trúc arm cấu trúc lệnh CCS Chân chân Transistor Chip Khả Trình chuyển đổi Chuyển đổi số tương tự Chuyển Đổi Tương Tự/Số - ADC Chuyển động số chương trình City Clip Điện Tử Code 8051 - ASM Code 8051 - C Code 8051-C code ASM code ASM mẫu 8086 Code AVR - C code C Code Lập Trình Code led sao băng code maupic code mẫu 8051 Code Mẫu 8086 Code Mẫu cho ARM - LPC1343 code mẫu pic Code PIC - C codemaupic Counter Cổng Vào Ra Cơ Bản Cuộn Cảm Cửa cuốn DA DAC Debug Decimal Delay8051 Dev-C++ Diode DIY Dò đường Do It Yourself doanh nghiệp Download DTMF Mobile đảo chiều động cơ Điện Trở Điện Tử Điện Tử Cơ Bản điều chế độ rộng xung điều chế xung PWM điều khiển bằng điện thoại Điều khiển cửa cuốn Điều khiển cửa cuốn bằng điện thoại điều khiển động cơ đo điện áp đo nhiệt độ đo nhiệt độ hiển thị lên lcd trên 8051 Đo Nhiệt Độ LM35 + LCD Đo Nhiệt Độ LM35 + Led 7 thanh đọc màu điện trở đồ chơi động cơ chân không Động cơ nhiên liệu Động cơ robo đồng hồ thời gian thực Ebook Đại Học ebook điện tử Ebook đồ án Ebook Tin Học Encoder Encoder là gì Full Giải Thuật Giải thuật PID Giáo Dục giao tiếp i2c pic 16f877a giao tiếp i2c pic16f877a với ic ds1307 giao tiếp máy tính qua rs232 Giao Tiếp Máy Tính VB6 giao tiếp rs232 giao tiếp spi giữa 2 pic giao tiếp spi trong pic Giáo Trình Điện Tử Giới thiệu 8051 Giới thiệu cơ bản GPIO Graphic Design hàm Hàn linh kiện dán Hexadecimal Hệ Hexa Hệ Nhị Phân Hệ Thập Lục Phân Hệ Thập Phân hiển thị lên lcd 16x2 Hoạt Động Học Học 8051 qua các ví dụ đơn giản Học ALtium Designer học AVR Học Corel Draw X3 Học Eagle HỌC LẬP TRÌNH 16F877A Học Lập Trình 8051 Học Lập Trình C Học Orcad Học Protues hoc-lam-robot-do-duong-qua-video Hồng ngoại hướng dẫn hướng dẫn Altium Designer hướng dẫn đo đồng hồ VOM hướng dẫn keil - C lập trình 8051 hướng dẫn làm led sao băng hướng dẫn làm led trái tim hướng dẫn lập trình ARM Hướng Dẫn Lập Trình ARM - LPC1343 hướng dẫn lập trình ARM-LPC2378 hướng dẫn lập trình CCS hướng dẫn lập trình PIC Hướng Dẫn Led Trái Tim hướng dẫn module sim548c hướng dẫn sử dụng keil hướng dẫn sử dụng proteus 8 Hyper Terminal hercules 3.2.4 I/O IC 555 IC 7447 IC 74HC151 IC 74HC154 IC 74HC245 IC 74HC595 IC 74LS138 IC DS1307 IC đồng hồ thời gian thực IC LM324 IC LM342 IC LM7805 IC số IC số opamp LM324 IC Thông Dụng IC555 Interrupt Keil 4 Full keil arm Keil C Keil uVision3 kế toán kiểm toán khái niệm Khái Niệm Cơ Bản Kho Vật Liệu khóa điện tử khóa số dùng 8051 khóa số dùng 89s52 Khóa Số Điện Tử khuếch đại kiểm tra Kinh doanh maketing kinh tế quản lí Kỹ Thuật Kỹ Thuật Vi Xử Lý làm mạch điện lý thú Làm quen AVR Lap Trinh Dieu Khien Robot Lập Trình lập trình 8051 Lập Trình AVR Lập Trình C lập trình c++ Lập Trình Led Quảng Cáo Lập Trình Nhúng Lập trình pic Lập trình Robot Lập Trình Vi Điều Khiển Lập Trình Với AVR Studio LCD 16x2 Lcd16x2 Led Clock Led Quay led sao băng led trai tim Led Trái Tim Lịch sử ra đời Linh Kiện Cơ Bản linh kiện điện tử Loa LPC 2378 LSB lý thú Mã AVR - C Mạch 7seg Mạch Amply.Mạch Loa Mạch Autorobo Mạch bảo vệ Mạch Cảm Biến mạch cảm ứng sờ tay Mạch Cầu H Mạch cube Mạch Đếm Sản Phẩm Mạch điện cơ bản Mạch điện hay Mạch Điện Ứng Dụng Mạch Điều khiển động cơ Mạch Động Cơ Mạch đồng hồ Mạch đồng hồ 4 led Mạch giao thông Mạch IC số Mạch in mạch khóa số mạch khuếch đại thuật toán mạch led chúc mừng năm mới mạch led đẹp Mạch Led đơn Mạch Led Quảng Cáo mach led trai tim mạch led trái tim Mạch Led Vumeter mạch lý thú Mạch Ma trận Phím Mạch Matrix Mạch nạp Mạch nguồn Mạch Nút Bấm mạch sóng rf mạch tăng áp Mạch thu phát Mạch tổ hợp MSI Mạch trái tim Mạch Vi điều khiển Microbicho module module GSM/GPS Module Sim548 Module Sim548 giao tiếp với vi điều khiển PIC Module Sim548C Mosfet Motor Mô Phỏng Phần Cứng Mô Tả Phần Cứng MSB mua led sao băng News Ngắt Ngắt Trong LPC23xx ngân hàng Ngôn Ngữ Ngôn Ngữ C Ngôn Ngữ Tự Học Lập Trình C Ngôn Ngữ VHDL Nguyên Lý nguyên lý ic 555 Nguyên Tắc nháy led Nhập môn C Nhỏ Gọn Nibble opamp People Phần Mềm phần mềm altium Designer Phần mềm điện tử Phần Mềm Điện Tử Phần Mềm Điện Tử Hay Phần Mềm Hay Phần Mềm Led Quảng Cáo phần mềm proteus 8 Phần mềm vi tính Phần Mền Phương pháp hàn linh kiện dán PIC pic16f877a Print Design Proteus Proteus 7.8 SP2 FULL PWM quà tặng bạn gái quà tặng độc đáo quản trị doanh nghiệp quản trị kinh doanh quét led 7 đoạn Relay robocon Robot ROBOT DÒ ĐƯỜNG rút gọn mạch logic tổ hợp Sach Dien Tu Sản Phẩm Thú Vị Sản Phẩm Thương Mại Sáng tạo Short Smart Home SMD sơ đồ nguyên lý spi Sports Sử Dụng Sử Dụng Đồng Hồ sử dụng đồng hồ VOM sử dụng ngắt trong pic sự khác nhau Sức mạnh số Tải tài chính tài chính doanh nghiệp tài chính ngân hàng Tài Khoản Chia Sẻ Tài Liệu Tài Liệu 8051 tài liệu avr Tài liệu Điện Tử Tài Liệu Pic Tài liệu robocon tài liệu về ngân hàng Tài Liệu Vi Điều Khiển tailieuvn Tạo cổng Com ảo Tạo cổng nối tiếp ảo tạo dự án trong keil arm Tạo Project trong Vi Xử Lý ARM tạo thư viện altium designer tạo xung vuông Tạp chí Tạp Chí Hay tăng áp Tập lệnh AT Team Support TEAMPLATE PROTEUS Test thị trường tài chính Thiết Bị Thú Vị Thiết kế robot Thiết lập Fuse Bits Thiết Lập Pin Thuật Toán Thuật Toán Điều Khiển PID Thuật Toán Quine MCCluskey Thư viện Protues Thực Hành Thyristor Timer Timer/Counter Tin Học Chia Sẻ Tổ Chức Bộ Nhớ tổng quan về proteus 8 Transistor Tranzito Tranzitor Trao đổi học tập Travel Trình Biên Dịch Trình Dịch Trong Suốt Truyền Thông Nối Tiếp Không Đồng Bộ- UART truyền thông nối tiếp RS232 Tụ điện TUT - 8051 - ASM TUT - 8051 - KeilC tự hành Tự Học C Tự Học Lập Trình C Tý hon UART Update USB Ứng Dụng Led Quảng Cáo ứng dụng mạch khuếch đại thuật toán vẽ mạch in vẽ mạch nguyên lý VHDL Vi Điều Khiển Vi điều khiển - Ứng dụng vi điều khiển PIC Vi mạch số Vi Xử Lý Vi Xử Lý 8051 Vi Xử Lý 8086 Vi Xử Lý ARM Vi Xử Lý PIC Video Video Mach Điện Virtual Serial Port Driver VOM vxl Web Design xác định góc quay động cơ xử lý chuỗi

Mấy hôm nay Mình đang loay hoay tìm mạch đếm sản phẩm,để lắp 1 mạch đếm người qua lại,lang thang 1 hồi chip tìm được 1 bài viết rất hay và dễ hiểu lại Viết bằng ASM,đúng món chip cần,Chip lại đang học LT C rồi sẽ chuyển sang C cho anh em xem.Anh em điện tử có gì thắc mắc Comment bên dưới nhé?
                                Mạch đếm sản phẩm dùng Chip AT89C51
Đây là một mạch đếm sản phẩm ứng dụng vi điều khiển mcs_51 dùng thu phát hồng ngoại, tăng số lượng sản phẩm lên bằng kỷ thuật đếm xung, sử dụng phương pháp quét led để hiển thị số đếm và có khả năng dừng băng truyền
Bây giờ chúng ta bắt đầu nhé: Giới thiệu sơ qua cho các bác biết trong mạch có những gì nhé : để làm mạch này thì chúng ta có 3 khối chính đó là khối phát hồng ngoại , khối thu hồng ngoại, khối hiển thị và dĩ nhiên là không thể thiếu bộ xử lý trung tâm rồi đúng không, các bác dùng vi điều khiển họ 8051 nhé (ở đây mình dùng con 89c51)
Khối phát hồng ngoại: dùng timer0 để phát xung 38khz ở một chân của 89c51 ở đây mình chọn chân p1.5, còn vấn đề phát như thế nào thì mình sẻ nói sau.
Còn đây là sơ đồ mạch phát:
                                                      Mạch đếm sản phẩm dùng Chip AT89C51- Ngôn Ngữ ASM
ở đây mình dùng cách ghép Darlington để khuếch đại tín hiệu đưa ra từ chân p1.5 vì tín hiệu từ 89c51 rất bé nên chúng ta cần khuếch đại dòng cho nó để đủ sáng led, Q1,Q2 các bác dùng loại NPN nhé ở đây mình dùng con C1815. Nói sơ qua cho các bác hiểu nguyên lý hoạt động của nó nhé: chúng ta phát dạng xung vuông có tần số là 38khz tức là chân p1.5 của 89c51 sẻ liên tục đảo chiều cứ lên 1 rồi lại xuống 0, khi p1.5 lên 1 thì Q1 dẫn lúc đó có dòng Vcc chạy từ cực C xuống E của Q1, vì cực E của Q1 nối với cực B của Q2 nên khi Q1 dẫn thì cực B của Q2 có dòng nên Q2 cũng dẫn và có dòng chạy từ Vcc qua cực C và xuống E của Q2 rồi qua led phát hồng ngoại qua điện trở rồi xuống mass, lúc này led phát hồng ngoại sáng còn khi chân p1.5 xuống mức 0 thì Q1 và Q2 không dẫn nên led phát hồng ngoại tắt.
khối thu hồng ngoại : có chức năng là phát hiện sự mất xung ( có sản phẩm đi qua ) và đưa về con 89c51 để xử lý tăng số đếm lên 1 đơn vị
đây là sơ đồ mạch thu:
                                         Mạch đếm sản phẩm dùng Chip AT89C51- Ngôn Ngữ ASM
Các bác nối theo sơ đồ nhé, cho mấy bác thông số luôn nè: R15 là 2k2, R16 chọn 1K R16 có khả năng chống nhiểu nữa nếu như có nhiểu thì các bác chỉ việc thay con trở R16 có giá trị nhỏ hơn là được nhưng mà mình nghĩ chắc là không còn nhiểu đâu vì ngày xư mình dùng tới 22k và rất nhiểu nên giờ giảm xuống 1k và thấy rất tốt các bác yên tâm, R17 chọn 100Ω, biến trở R18 chọn 100k, tụ C4 và C5 chọn khoảng 10uF.
Nguyên lý hoạt động: khi có sản phẩm đi qua thì led thu hồng ngoại bị che khuất lúc này có dòng đi từ Vcc qua led thu hồng ngoại ròi qua cực B của Q3 lúc này Q3 dẫn, cực C của Q3 xuống mức thấp lúc này tụ C4 xả điện qua diode qua Q3 và xuống mass lúc này chân số 2 của LM555 được kích và tạo ra một xung ở chân số 3 đưa về cho ic89c51 xử lý. (chân số 3 của LM555 được nối vào chân P3.2 của 89c51 tức là chân 12 )
Biến trở R18 dùng để điều chỉnh tốc độ nhận dạng sản phẩm đi qua, khi có sản phẩm đi qua thì led thu hồng ngoại bị che khuất ta có sơ đồ mất xung như sau.
                                  Mạch đếm sản phẩm dùng Chip AT89C51- Ngôn Ngữ ASM
Khối hiển thị : dùng để hiển thị số lượng sản phẩm đã đi qua.
Đây là sơ đồ khối hiển thị:
                            Mạch đếm sản phẩm dùng Chip AT89C51- Ngôn Ngữ ASM
Q4 và Q5 dùng loại PNP ở đây mình dùng A1015. Còn R13, R14 thì các bác chọn khoảng 10k còn trở R5 đến R12 thì các bác chọn sao cho led đủ sáng nhé (nên chọn giá trị nhỏ thôi ) còn bác nào mà sợ tốn trở thì làm thế này bỏ R5 đến R12 đi ta cứ nối thẳng nó vào Port0 của 89c51 thay vào đó là ta sẻ gắn cho nó một con trở ở cực C của Q4 và Q5 là khoảng 220Ω các bác cứ chọn sao cho led đủ sáng là được. Ở đây mình dùng led Anot chung ( loại Anot chung này chân chung được nối lên nguồn )
Led 7đoạn các bác về giải mã nó nhé.
Đây là hình dạng của led
Mạch đếm sản phẩm dùng Chip AT89C51- Ngôn Ngữ ASM
Các bác dùng VOM để ở thang đo điện trở nhỏ nhất rồi đưa que đỏ vào chân số 3 hoặc chân số 8 que còn lại lần lượt đưa vào các chân 1,2,4,5,6,7,9,10 xem đâu là a, đâu là b… ( lưu ý là VOM trên thị trường có loại của trung quốc thì que đỏ là cực âm và que đen là cực dương các bác chú ý nhé nếu là loại này thì phải làm ngược lại đưa que đen vào chân số 3 hoặc 8 còn que kia thì đo các chân còn lại )
Còn ở đây mình giải mã ra được : 1:e 2:d 3:Vcc 4:c 5:dp 6:b 7:a 8:Vcc 9:f 10:g
Các bác nối chân của led vào port0 như thế này nhé: “a” nối vào chân P0.7 ( tức là chân 32 của 89c51 ) lần lượt cho tới “dp” nối vào chân P0.0 (tức là chân 39 của 89c51) 
Như vậy là xong phần cứng bây giờ chúng ta thử cho nó hiển thị lên số 0 nhé. Quy tắc là như thế này khi ta cho phép dòng đi qua con led thì led tích cực và muốn cho chổ nào sáng thì ta cho chổ đó về 0 giả sử muốn cho led đơn vị sáng lên số 0 thì ta điều khiển sao cho chân p1.7 lên mức 1 và chân p1.6 về mức 0 như vậy là led đơn vị được cho phép và muốn hiển thị lên số 0 thì ta cần làm cho các thanh led a,b,c,d,e,f sáng để cho nó sáng thì các chân này sẻ về mức 0 (cụ thể như con led mình đã giải mã thì mình điều khiển con 89c51 để cho chân 1,2,4,6,7,9, của led về mức 0 vậy là sẻ có số 0 hiển thị trên led đơn vị ) như vậy thì muốn hiển thị số 0 thì P0 cần xuất ra giá trị là 00000011 tức là 03H tương tự số 1 là chân "b,c" sáng và port0 cần xuất ra giá trị là 10011111 tức là F9H tương tự ta có được bảng số như sau: 0 = 03H; 1 = 9FH; 2 = 25H; 3 = 0DH; 4 = 99H; 5 = 49H; 6 = 41H; 7 = 1FH; 8 = 01H ; 9 = 09H
Đây là mạch tổng quát :(click vào ảnh để phóng to)                      Mạch đếm sản phẩm dùng Chip AT89C51- Ngôn Ngữ ASM

Phần cứng như thế là ổn bây giờ chúng ta đi viết chương trình cho nó nhé:Để viết chương trình các bạn cần nắm được mình cần làm gì cái đã: chúng ta đang làm một mạch đếm sản phẩm và chúng ta quản lý số đếm trong R7 nên chương trình chính chúng ta có nhiệm vụ là nạp các giá trị ban đầu cho phép ngắt, tách số BCD và hiển thị ra LED. Trong mạch này chúng ta sử dụng 3 nguồn ngắt đó là ngắt timer0 dùng để phát xung cho mạch phát, ngắt ngoài 0 dùng để tăng số lượng sản phẩm và ngắt timer1 dùng để dừng băng truyền.Chương trình phát xung: sử dụng ngắt timer0 chế độ 2 ( timer0 chế độ 2 có khả năng tự nạp lại giá trị ban đầu nên chúng ta chỉ cần nạp một lần là đủ ). Chúng ta dùng thạch anh 12MHz nên ta có 1 chu kỳ máy = 1µs, chúng ta phát ở tần số 38khz vậy ta có T=1/f = 1/38 = 0.026ms = 26 µs → Ton =Toff = 26/2 = 13 
như vậy cần nạp cho timer0 giá trị là -13.Trong chương trình ngắt timer0 ta chỉ việc đảo trạng thái chân p1.5 là được và ta có đoạn chương trình ngắt timer0 là:
T0_ISR:
CPL P1.5
RETI
Chương trình đếm sản phẩm: chúng ta sử dụng ngắt ngoài 0. Khi phát hiện mất xung ( có sản phẩm đi qua) chân P3.2 xuống mức thấp và lúc này xảy ra ngắt ngoài 0. Trong chương trình ngắt ngoài 0 chúng ta tăng số đếm lên 1 đơn vị và so sánh nó với giá trị là 100 khi nó đạt đến 100 thì reset nó về 0
ta có đoạn chương trình ngắt ngoài 0:

EX0_ISR:
INC R7 ; tang s? d?m lên 1 don v?
CJNE R7,#100,EXIT ;so sánh R7 v?i 100 n?u chua = 100 thì nh?y t?i EXIT còn n?u b?ng 100 thì xóa nó v? 0
MOV R7,#0
EXIT: RETI
Còn bác nào muốn dừng băng truyền thì trong chương trình ngắt ngoài 0 ta so sánh số đếm với các giá trị định sẳn chẳng hạn như các giá trị 20,40,60,80,100, khi số đếm bằng các giá trị này thì cho dừng bằng truyền trong 5s rồi cho băng truyền hoạt động trở lại.
ta có lại đoạn chương trình ngắt ngoài 0 như sau:

E0_ISR:
INC R7 ; tăng R7 lên 1
CJNE R7,#20,TIEP ; so sánh R7 với 20, nếu chưa bằng thì nhảy tới nhản TIEP còn nếu bằng rồi thì gọi chương trình TIEPTUC
ACALL TIEPTUC ; gọi chương trình TIEPTUC
TIEP: CJNE R7,#40,TIEP1 ; so sánh R7 với 40
ACALL TIEPTUC ; gọi chương trình tiếp tục
TIEP1: CJNE R7,#60,TIEP2 ; so sánh R7 với 60
ACALL TIEPTUC ; gọi chương trình TIEPTUC
TIEP2: CJNE R7,#80,TIEP3 ; so sánh R7 với 80
ACALL TIEPTUC ; gọi chương trình TIEPTUC
TIEP3: CJNE R7,#100,EXIT ; so sánh R7 với 100
MOV R7,#0 ; xóa R7 về 0
ACALL TIEPTUC ; gọi chương trình TIEPTUC
EXIT: RETI ; quay về từ ngắt
Trong chương trình TIEPTUC chúng ta sẻ cho dừng băng truyền nhưng ở đây mình chỉ làm mô phỏng nên mình thay cái động cơ điều khiển băng truyền là một con led khi led sáng thì báo hiệu là đang dừng băng truyền. Trong main chúng ta nạp các giá trị ban đầu cho phép ngắt và tách số BCD rồi hiển thị lên LED dùng phương pháp quét led ( nói sơ qua về phương pháp quét led cho một số bác chưa biết hiểu: chúng ta nối các chân a,b,c,d,e,f,g,dp của led chục và led đơn vị lại với nhau, và ta gửi tín hiệu ra led để hiển thị giá trị cần hiển thị và dĩ nhiên là nếu chúng ta cho phép cả hai led thì cả hai led đều hiển thị một số, cho nên trong một lúc chúng ta chỉ cho phép một led sáng. Ví dụ khi muốn hiển thị số 15 thì ta cần led chục hiển thị số 1 còn led đơn vị hiển thị số 5 vậy thì đầu tiên ta gửi tín hiệu cho sáng số 1 rồi tắt led đơn vị và cho phép led chục, delay một khoảng thời gian rồi gửi tiếp tín hiệu cho sáng số 5 rồi tắt led chục và cho phép led đơn vị) quét led nghĩa là cho trong một trạng thái chỉ có một led được sáng cứ như thế led chục sáng số 1 và tắt led đơn vị, delay một khoảng thời gian rồi tắt led chục và cho led đơn vị sáng số 5 rồi delay một khoảng thời gian, tốc độ sáng led là khoảng 24hình/s như thế thì mắt chúng ta có không thể nhận biết được sự thay đổi đó và có cảm giác là nó đang hiển thị số 15. Giải thuật tách số đếm trong R7 như thế này: chúng ta nạp cho B một giá trị là 10 và lấy R7 chuyển vào A rồi lấy A chia cho B như thế phần nguyên sẻ nằm trong A ( tức là số chục lưu trong A ) còn phần dư nằm trong B ( tức là số đơn vị nằm trong B), như vậy là ta đã tách được số chục và số đơn vị ra, chúng ta chuyển số hàng chục ra port0 rồi cho led chục tích cực và tắt led đơn vị, rồi chuyển B và A rồi xuất nó ra port0 và cho phép led đơn vị sáng và tắt led chục.
Còn đây là code hoàn chỉnh:

ORG 0000H ; điểm vào reset
LJMP MAIN ; gọi chương trình chính
ORG 000BH ; vecter timer 0
LJMP T0_ISR ; gọi chương trình ngắt timer 0
ORG 0003H ; vecter ngắt ngoài 0
LJMP E0_ISR ; gọi chương trình ngắt ngoài 0
ORG 001BH ; vecter timer 1
LJMP T1_ISR ; gọi chương trình ngắt timer 1
ORG 0030H ; điểm vào chương trình chính
MAIN: MOV TMOD, #12H ; timer 0 chế độ 2 và timer 1 chế độ 1
MOV TH0,#(-13) ; sau 13 Ms thì xảy ra ngắt timer 0 ( tần số 38Khz)
SETB TR0 ; cho phép timer 0 chạy
SETB EA ; cho phép ngắt toàn bộ
SETB ET0 ; cho phép ngắt timer 0
SETB EX0 ; cho phép ngắt ngoài
SETB IT0 ; ngắt cạnh xuống
CLR P1.4 ; xóa p1.4 về 0 (tắt led báo hiệu dừng băng truyền)
MOV R7,#0 ; nạp cho R7 giá trị ban đầu (R7 chứa số đếm)
MOV R5,#50 ; nạp cho R5 giá trị 50 (mục đích tạo khoảng thời gian để ngừng băng truyền)
LOOP: MOV A,R7 ; chuyển số đếm trong R7 vào A
MOV B,#10 ; nạp cho B giá trị 10
DIV AB ; chia A cho B
MOV DPTR,#LUT ; chỉ con trỏ DPTR vào bảng LUT
MOVC A,@A+DPTR ;chuyển giá trị đã chọn trong bảng LUT vào thanh ghi tích lũyA
MOV P0,A ; xuất A ra port 0
CLR P1.7 ; cho phép led chục sáng
SETB P1.6 ; tắt led đơn vị
ACALL DELAY ; gọi chương trình delay
MOV A,B ; chuyển B vào A
MOV DPTR,#LUT ; chỉ con trỏ DPTR vào bảng LUT
MOVC A,@A+DPTR ;chuyển giá trị đã chọn trong bảng LUT vào thanh ghi tích lũyA
MOV P0,A ; xuất A ra port 0
CLR P1.6 ; cho phép led đơn vị sáng
SETB P1.7 ; tắt led chục
ACALL DELAY ; gọi chương trình delay
SJMP LOOP ; quay lại chương trình chính
RET
T0_ISR: CPL P1.5 ; đảo trạng thái p1.5 ( mục đích tạo xung vuông )
RETI ; quay lại từ ngắt
E0_ISR: INC R7 ; tăng R7 lên 1
CJNE R7,#20,TIEP ; so sánh R7 với 20, nếu chưa bằng thì nhảy tới nhản TIEP còn nếu bằng rồi thì gọi chương trình TIEPTUC
ACALL TIEPTUC ; gọi chương trình TIEPTUC
TIEP: CJNE R7,#40,TIEP1 ; so sánh R7 với 40
ACALL TIEPTUC ; gọi chương trình tiếp tục
TIEP1: CJNE R7,#60,TIEP2 ; so sánh R7 với 60
ACALL TIEPTUC ; gọi chương trình TIEPTUC
TIEP2: CJNE R7,#80,TIEP3 ; so sánh R7 với 80
ACALL TIEPTUC ; gọi chương trình TIEPTUC
TIEP3: CJNE R7,#100,EXIT ; so sánh R7 với 100
MOV R7,#0 ; xóa R7 về 0
ACALL TIEPTUC ; gọi chương trình TIEPTUC
EXIT: RETI ; quay về từ ngắt
DELAY: MOV R6,#200
DJNZ R6,$
RET ; 3 dòng lệnh này là delay 400Ms

TIEPTUC: SETB P1.4 ; cho đèn sáng ( báo hiệu dừng băng truyền )
SETB ET1 ; cho phép ngắt timer 1
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000) ; hai dòng lệnh này là nạp giá trị cho timer 1 ( sau 50000 Ms thì xảy ra ngắt timer 1)
SETB TR1 ; cho timer 1 chạy
RET ; kết thúc chương trình tiếp tục

T1_ISR: DJNZ R5,THOAT ; giảm R5 đi 1 và so sánh nó với 0 nếu chưa bằng 0 thì thoát còn nếu bằng 0 thì lằm tiếp
CLR P1.4 ; tắt đèn ( báo hiệu cho băng truyền hoạt động trở lại )
CLR ET1 ; cấm ngắt timer 1
CLR TR1 ; dừng timer 1
MOV R5,#50 ; nạp lại cho R5 giá trị 50
THOAT: RETI ; trở về từ ngắt

LUT: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H
END

Mạch đếm sản phẩm dùng Chip AT89C51, đếm sản phẩm, mạch đếm sản phẩm. Dùng ngôn ngữ ASM

Đăng nhận xét

Author Name

{picture https://lh3.googleusercontent.com/-5Ns_H0UG4cU/Vuu5KrqbEnI/AAAAAAAAEZs/XgsHemy00D4eQ3ivA76v6FFEm7jg9reVwCCo/s512-Ic42/pham-van-ngoc-anh.jpg}

Tôi là Ngọc Anh. Tôi đến từ Nghệ An. Tôi tốt nghiệp một trường đại học tại Sài Gòn. Hiện tôi đang phát triển công ty riêng. Liên lạc với tôi qua:

{facebook https://www.facebook.com/phamvanngocanh}
{twitter https://twitter.com/nghiphong1993}
{google https://plus.google.com/+dientuchiase/posts}
{youtube https://www.youtube.com/channel/UCeJKhA_goBNFmDw6RKNtmYQ}

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.