1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG PHẦN MỀM KEIL C51 TRONG LẬP TRÌNH VI ĐIỀU KHIỂN

39 866 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 1,03 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG PHẦN MỀM KEIL_C51 TRONG LẬP TRÌNH VI ĐIỀU KHIỂN - Các bước cài đặt và thiết lập cho phần mềm - Hướng dẫn lập trình và mô phỏng một số chương trình Điều xung,

Trang 1

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG PHẦN MỀM

KEIL_C51 TRONG LẬP TRÌNH VI ĐIỀU KHIỂN

- Các bước cài đặt và thiết lập cho phần mềm

- Hướng dẫn lập trình và mô phỏng một số chương trình (Điều xung, Watchdog Timer, Sử dụng các Macro)

- Hướng dẫn lập trình truyền thông nối tiếp (UART, SPI)

- Hướng dẫn lập trình giao tiếp ngoại vi (VĐK - máy tính)

- Cách thiết lập các chế độ Timer, Counter

- Giới thiệu một số lệnh căn bản

Trang 2

LỜI NÓI ĐẦU

Hiện nay Vi Điều Khiển đã rất phổ biến ở nước ta từ những sản phẩm đơn

giản như máy nấu nước,nấu cơm tự động… đến những sản phẩm đắt tiền như máy giặt, máy điều hòa… Nói chung hầu như tất cả những sản phẩm nào có chức năng giao tiếp với người dùng đều cần một bộ vi điều khiển Nhưng chỉ khác một điều là nó được nhà sản xuất lập trình một lần và tung ra hàng loạt và hầu như chúng ta không có khả năng thay đổi chương trình cho chúng

Tuy nhiên khi đã nắm bắt được khả năng lập trình cho VĐK ta có thể làm rất nhiều việc chẳng hạn làm ra những sản phẩm có khả năng giao tiếp người dùng như đồng hồ hiển thị bằng LCD có chức năng nhập thời điểm báo chuông, bảng quang báo bằng Led ma trận, các dây chuyền tự động…….và gần gũi thiết thực nhất là lập trình cho ROBO (đó là một số sản phẩm mà chúng tôi câu lạc bộ E_CLUP đã thực hiện thành công)

Để lập trình VĐK thì điều đầu tiên là cần một phần mềm lập trình do đó

trong bài viết này tôi sẽ giới thiệu với các bạn phần mềm Keil_C51 Đây là phần mềm lập trình cho phép bạn sử dụng cả 2 ngôn ngữ Asm và ngôn ngữ C Kết

hợp với phần giới thiệu tôi sẽ trình bày một số bài lập trình cơ bản đã được viết hoàn chỉnh và hệ thống Khi viết bằng ngôn ngữ ASM các bạn sẽ dễ dàng nắm bắt được cấu trúc bên trong VĐK cách thực thi từng lệnh nên thích hợp với người mới học, sau khi đã có kinh nghiệm lập trình bạn sẽ dễ dàng chuyển qua ngôn ngữ C Để tiện cho người mới học theo dõi tôi đã trình bày dưới dạng ngôn ngữ ASM và tôi đang hoàn thiện bài hướng dẫn khác bằng ngôn ngữ C

Vì bản thân tôi cũng mới bắt đầu làm quen với VĐK vài năm và các bài lập trình chủ yếu được viết trên kinh nghiệm thực tế của tôi nên có thể còn nhiều sai sót mong được sự góp ý của các bạn để bài viết có thể hoàn thiện hơn Chúc các bạn thành công!!!

Biên Hòa 15/03/2008

Lê Tiến Lộc

Trang 3

I CÀI ĐẶT PHẦN MỀM KEIL C51:

- Nếu bạn là người yêu thích công việc lập trình Vi Điều Khiển và bạn đang sử dụng những phần

mềm như Pinacal, Crimson…… và bạn gặp những rắc rối như đối với Pinacal thì bạn không thể lập

trình quá 2KB nếu bạn không đăng ký mua bản quyền, Crimson hơi khó xài với những người mới học lập trình và không hỗ trợ những tính năng mô phỏng Ở đây tôi sẽ giới thiệu với bạn một phần mềm

với đầy đủ tính năng và có vẻ dễ dàng sử dụng hơn Với Phần mềm Keil uVision3 bạn có thể xem mô

phỏng dạng tín hiệu ra ở từng chân của Vi Điều Khiển với một màn hình tương tự Oscilloscope Dễ dàng và thuận tiện cho việc lập trình hơn với những thư viện khai báo có sẵn trong chương trình

Bạn có thể tải File Setup trên mạng hoặc liên hệ với chúng tôi để được cung cấp miễn phí Sau khi có file Setup bạn nhấp double vào biểu tượng cài đặt như sau để bắt đầu quá trình cài đặt

Keil C51 v8.05.exe

Sau khi nhấp chuột cửa sổ sau xuất hiện :

- Nhấn Next để tiếp tục việc cài đặt

- Sau khi nhấn next xuất hiện hộp thoại sau:

- Đánh dấu chọn vào ô check box và chọn next

Nhấp vào đây để cài đặt

Check here to agree

Trang 5

- Sau khi cài đặt xong nhấn Finish để kết thúc quá trình cài đặt

• Chưa hết, để có thể sử dụng phần mềm này bạn cần phải CRAK nó Coppy folder Keil trong thư mục CRACK và Paste nó lên thư mục mà bạn đã chọn khi cài Sẽ xuất hiện một

hộp thoại yêu cầu bạn có muốn replace không? Chọn Yes để thay thế Chú ý là trong quá

trình Crack bạn nên đóng tất cả cửa sổ chương trình lại

- Mở thư mục Keil vừa thay thế ra chọn file TOOLS

• Đến đây bạn đã hoàn tất quá trình cài đặt!!! Congratulation!!!!

I THIẾT LẬP PHẦN MỀM:

Tiếp theo, mời bạn làm quen với giao diện của chương trình:

- Khởi động chương trình bằng cách : nhấp double vào biểu tượng trên Desktop hoặc vào Start -> Program -> chọn biểu tượng của chương trình

Giao diện chính của chương trình như sau:

Coppy file này trong mục CRACK và Paste nó vào thư mục cài đặt !!!Thay thế file Keil trong mục vừa cài bằng file này

Biểu tượng của chương trình

Chọn đúng đường dẫn cho file rồi chọn save Trong file cài thường đường dẫn được chọn mặc định là ổ D Nhưng ta thường cài ở ổ C nên phải thay đường đẫn cho chính xác

Trang 6

Bây giờ việc đầu tiên bạn phải làm là tạo 1 Project mới để làm việc

- Trên thanh menu vào Project -> New Project

- Hộp thoại sau xuất hiện:

Cửa sổ soạn thảo

Cửa sổ quản lý

Cửa sổ báo lỗi

Nút dịch sang file Hex và kiểm lỗi

Trang 7

Nhấn Save hộp thoại sau xuất hiện:

- Sau khi chọn Chip nhấn OK, xuất hiện tiếp hộp thoại sau

Chọn Yes để đồng ý chuyển những mã code chuẩn 8051 vào Project của bạn Lúc này bạn có thể thấy trên cửa sổ chương trình là tên Project mà bạn đặt

- Sau đó, bạn vào menu Project -> Options for Target ‘Target 1’

Đặt tên Project vào đây!!!

Chọn Chip mà bạn định dùng

VD: 89C51RD2XX

Trang 8

Hộp thoại sau xuất hiện:

- Chọn OK

Sau khi thiết lập xong vào thẻ A51:

Chọn thẻ Output

Nhấn dấu chọn vào đây để tạo file HEX

Đặt tên cho file HEX ở đây

Bạn có thể chọn đường dẫn cho file HEX ở đây

Trang 9

- Nếu không tắt dấu chọn có nghĩa là bạn đồng ý định nghĩa chức năng thanh ghi đặc biệt theo chuẩn 8051 và không cần khai báo thư viện ở đầu chương trình, tuy nhiên khi chương trình được viết cho các IC có chức năng đặc biệt thì bạn cần khai báo tên thư viện ở đầu bài lập trình và tắt dấu chọn ở thẻ này

- Chọn OK

- Vậy là bạn đã hoàn tất việc thiết lập phần mềm, có thể bạn thấy hơi phức tạp nhưng công việc này bạn chỉ phải thiết lập một lần duy nhất

II VIẾT MỘT CHƯƠNG TRÌNH VÀ CHẠY MÔ PHỎNG: (hiển thị dưới dạng tín hiệu)

1 Mô phỏng tín hiệu Digital và cách sử dụng Watchdog timer:

- Bây giờ tôi sẽ hướng dẫn bạn viết một chương trình chi tiết từ A->Z Giả sử ta có một đề bài là:

Viết một chương trình chớp tắt đèn Standby vì đây là một bài tập nhỏ chỉ cần một vài câu lệnh

nên tôi sẽ thêm vào phần Watchdog Timer để giới thiệu cùng bạn

- Sau khi mở cửa sổ soạn thảo bạn viết đoạn code sau vào:

để bắt đầu viết code bạn nhấp phải chuột chọn insert ‘#include <REG51F.H>’ đây là thư viện giúp bạn không phải khai báo các thanh ghi chức năng đặc biệt

#include <REG51F.H> ;ADD THƯ VIỆN VÀO

START BIT P0.0 ;KHAI BÁO NÚT NHẤN

STAND_BY BIT P1.0 ;KHAI BÁO ĐÈN LÀ CHÂN P1.0

WMCON EQU 0A6H ;KHAI BÁO WATCHĐOG TIMER

Tắt dấu chọn

ở đây!

Trang 10

MAIN:

MOV TMOD,#00010001B ;KHAI BÁO SỬ DỤNG TIMER 0 VÀ 1

MOV IE,#10001010B ;KHAI BÁO SỬ DỤNG NGẮT TRONG TIMER 0 VÀ 1

MOV TH0,#HIGH(-1000) ;NẠP GIÁ TRỊ BAN ĐẦU CHO BYTE CAO TIMER 0

MOV TL0,#LOW(-1000) ;NẠP GIÁ TRỊ BAN ĐẦU CHO BYTE THẤP TIMER 0

MOV TH1,#HIGH(-1000) ;NẠP GIÁ TRỊ BAN ĐẦU CHO BYTE CAO TIMER 1

MOV TL1,#LOW(-1000) ;NẠP GIÁ TRỊ BAN ĐẦU CHO BYTE THẤP TIMER 1

MOV P0,#0FFH ;ĐƯA CÁC CHÂN CỦA PORT 0 LÊN MỨC 1

MOV R0,#10 ;GIÁ TRỊ TRÌ HOÃN PHỤC VỤ NGẮT T0

SETB TR1 ;KHỞI ĐỘNG TIMER 1

LOOP:

JB START ,N2 ;KIỂM TRA NÚT NHẤN START

JB START,N2

MOV P1,#00H ;ĐƯA CÁC CHÂN CỦA PORT 1 XUỐNG MỨC 0

N2:

JB STOP,LOOP

CLR TR1

SJMP LOOP ;QUAY LẠI ĐỂ BẮT ĐẦU VIỆC QUÉT PHÍM

NGAT_T0: ;TRÌNH PHỤC VỤ NGẮT T0

CPL STAND_BY ;đảo bit sau 0,01s

MOV R0,#10 ;nạp lại giá trị đếm

EXIT_T0:

RETI ;kết thúcngắt quay về chương trình chính

NGAT_T1:

CLR TR1

MOV TH1,#HIGH(-1000)

MOV TL1,#LOW(-1000)

MOV WMCON,#01EH ;DAT GIA TRI DEM

EXIT_T1:

SETB TR1

RETI

Trang 11

DELAY: ;CHƯƠNG TRÌNH CON DELAY

- Bây giờ ta quay lại việc mô phỏng với KEIL, sau khi gõ đoạn code như trên vào màn hình

soạn thảo bạn chọn file Save as, hộp thoại sau xuất hiện và bạn nhớ đặt tên file với đuôi là asm (Ví dụ: Standby.asm) Khi lưu thành công bạn sẽ thấy các đoạn code có màu sắc phân

biệt giữa các nhãn, lệnh và đối tượng rất dễ nhìn Theo tôi bạn nên save file.asm trước khi viết code vì chương trình sẽ rõ ràng hơn

- Chạy mô phỏng

B1: Click here

B2: Click here

B3: Click here để hiển thị màn hình mô phỏng

B4: Click here để thấy các Ports và timers

B5: : Click here để hiển thị hộp thoại sau

Trang 12

- Ta có thể xem trạng thái các thanh ghi bằng cách vào View -> Watch & call stack window, cửa sổ ở góc phải màn hình hiện ra, chọn thẻ Watch, nhấn F2 để nhập thanh ghi cần xem

- Tiếp theo bạn cũng nhấn nút STOP pin P0.1 để thử xem Watchdog timer có chạy không!

Nhấp vào đây

Chọn chân cần mô phỏng ->Enter

Sau khi chọn nhấn Close

Có thể chọn màu ở đây

Chọn pin P0.0 vì khi lập trình bạn khai báo Start là pin P0.0, để bắt đầu chạy, lưu ý là sau khi chọn phải nhã dấu chọn vì trong chương trình bạn có phần chờ nhã phím!!!

Trang 13

- Như vậy là các bạn đã biết cách sử dụng Watchdog timer, tạo đèn Standby, chạy mô phỏng với chương trình Keil

- Tiếp theo ta thử qua khái niệm điều xung và mô phỏng tín hiệu analog

2 Mô phỏng tín hiệu Analog và cách thiết lập chế độ điều xung:

- Giả sử ta có đề bài: Tạo tín hiệu hình Sin trên chân P1.0 (lưu ý IC của bạn phải hỗ trợ chức năng này) Hay làm cho một đèn Led sáng dần và tắt dần Vì bài này cũng tương đối ngắn nên

ta cùng kết hợp với cách sử dụng Timer 2

- Trong cửa sổ Code bạn nhập đoạn code như sau:

MOV CMOD,#0 ;Chế độ 6 chu kì xung nhịp = 1_PER_2 chu kì máy

;Cho phép PCA (programing counter array) hoạt động

MOV CCAPM1,#01000010B ; P1.4 PCA hoạt động chế độ PWM 8 bits

MOV T2MOD,#00000001B ;Khai báo T2MOD,T2CON

MOV R2,#100 ;giá trị trì hoãn phục vụ timer 2

SETB TR2 ;Khởi động timer 2

Tín hiệu trở nên phẳng và cửa sổ báo watchdog timer đã xảy ra!!!

B1: Click here Để dừng mô phỏng

B2: Click here Để đóng cửa sổ mô phỏng

Trang 14

SETB CR ;Set bit CR cho phép điều xung

MOV R1,#0 ;tạo giá trị ban đầu cho R0 (ở đây ta sử dụng như 1 biến)

NGAT_TIMER2: ;Trình phục vụ ngắt T2

Trang 15

- Vì điều xung (PWM): có nghĩa là điều chế độ rộng xung, nên ở ví dụ trên tùy theo giá trị trong biến XUNG (CCAP1H biến này được tôi dùng ngắt timer cho thay đổi từ 0 -> 255) sẽ cho ra độ rộng xung trên chân P1.4 thay đổi liên tục Đây là một ví dụ cơ bản về điều xung để một đèn sáng dần lên và tắt dần xuống

3 Các Macro và cách thiết lập:

REPT count ;count là giá trị số lần lặp (giá trị max là 975 lần)

Macro body ;thân macro là nơi chứa lệnh cần lặp

Endm ;lệnh kết thúc 1 macro

Code mẫu như sau:

;*************************************************************

IRP parm-name,<parm-list>;TẠO MACRO VỚI TÊN ĐẠI DIỆN

Macro body ;thân macro là nơi chứa lệnh cần tác động đến parm-list

Endm ;lệnh kết thúc 1 macro

Code mẫu như sau:

IRP RENAME,<P2.0,P2.1,P2.2> ;TAO MACRO VOI NAME THAY THE

Nếu chọn State bạn sẽ thấy giữa

0 và 1 còn có dãy t/h khác Chỉ điều xung mới có Hình dưới là Standby ta thấy nó chuyển trực

tiếp từ 0 lên 1

Trang 16

CLR RENAME ;xoùa caùc bit trong daâu < >

;*************************************************************

IRPC parm-name,<parm-string> ;táo macro thay chuoêi kyù töï ñeơ taùc ñoông töøng kyù töï Macro body ;thađn macro laø nôi chöùa leônh caăn taùc ñoông ñeân töøng kyù töï trong chuoêi

Endm ;leônh keât thuùc 1 macro

Code maêu nhö sau:

4 Lieđn keât file:

- Ñoâi vôùi moôt soâ chöông trình lôùn bao goăm nhieău chöông trình con, ta coù theơ duøng tính naíng lieđn keât file ñeơ tieôn theo doõi vaø söõa ñoơi, thay theâ caùc chöông trình con

- Ñeơ lieđn keât file, tređn ñaău chöông trình chính ta khai baùo ñöôøng daên ñeân file chöùa chöông trình con

Ví dú: Trong chöông trình chính coù duøng ñeân chöông trình con ñaịt tái ñöôøng daên D\data\tienloc\count_line.asm thì trong chöông trình chính khai baùo nhö sau:

#include <D\data\tienloc\count_line.asm>

III NGAĨT TRUYEĂN THOĐNG NOÂI TIEÂP GIAO TIEÂP NGOÁI VI:

1 Duøng chuaơn truyeăn baât ñoâi xöùng UART 8bit:

- Bađy giôø tođi seõ trình baøy veă caùch söû dúng ngaĩt truyeăn thođng noâi tieâp Trong Vi Ñieău Khieơn coù chöùc naíng ngaĩt truyeăn thođng noâi tieâp ñeơ truyeăn vaø nhaôn döõ lieôu Chađn TXD(P3.1 phaùt) vaø

chađn RXD(P3.0 thu) Thanh ghi ñieău khieơn ngaĩt noâi tieâp laø SCON vaø thanh ghi ñeôm döõ lieôu laø SBUF Ñòa chư veùctor ngaĩt laø 023H, bit cho pheùp ngaĩt laø ES bit 4 trong thanh ghi IE

Thanh ghi SCON coù 8 bit:

+ Scon.0(RI) ñòa chư 98H côø ngaĩt thu ñöôïc set khi keât thuùc vieôc thu 1 kyù töï

+ Scon.1(TI) ñòa chư 99H côø ngaĩt phaùt ñöôïc set khi keât thuùc vieôc phaùt 1 kyù töï

+ Scon.2(Rb8) ñòa chư 9AH bit thu 8 Bit thöù 9 ñöôïc nhaôn ôû cheâ ñoô 9bit

+ Scon.3(Tb8) ñòa chư 9BH bit thu 8 Bit thöù 9 ñöôïc phaùt

+ Scon.4(REN) ñòa chư 9CH bit cho pheùp thu, phại ñöôïc set=1 ñeơ nhaôn kyù töï

+ Scon.5(SM0) ñòa chư 9DH bit chón cheẫ ñoô

+ Scon.6(SM1) ñòa chư 9EH bit chón cheẫ ñoô

+ Scon.7(SM2) ñòa chư 9FH bit chón cheẫ ñoô

Giạ söû ta coù moôt yeđu caău giao tieâp döõ lieôu giöõa 2 VÑK Moôt con master laøm nhieôm vú phaùt döõ lieôu vaø moôt con slaver laøm nhieôm vú nhaôn döõ lieôu töø con chụ vaø ñöa döõ lieôu ñoù ra port2

Baøi code maêu cho con Master nhö sau:

#include <REG51.H>

DATAEXAMBLE EQU 30H

Trang 17

ORG 0000H ;dia chi vector reset

MAIN:

MOV SCON,#01010010B ;sm0/sm1= 0/1 uart 8bit thay doi t/lap boi bo dinh thoi; bit

;4(REN)=1 bit cho phep thu, bit0(RI) = 0 san sang nhan du ;lieu; bit1(TI)=1 san sang phat du

;lieu

MOV TMOD,#00100000B ;bit5=1 bit4=0 che do 8bit tu dong nap lai cua timer1

MOV TH1,#-3 ;tao toc do baud (voi thach anh 12Mh gia tri Th1= -3 ;thi toc do baud là ;9600)

MOV DATAEXAMBLE,#01010101B ;dua mot byte du lieu de chuan bi truyen

LOOP:

SERIAL:

MOV A,DATAEXAMBLE ;dua byte du lieu vao thanh ghi A

JNB TI,$ ;co TI duoc set ngay sau khi phat xong 1 ky tu

MOV SBUF,A ;dua gia tri thanh ghi A vao thanh ghi SBUF

NGAT_SERIAL: ;Trình phục vụ ngắt port nối tiếp

JNB RI,$ ;co RI duoc set ngay sau khi nhan xong 1 ky tu

MOV A,SBUF ;Đưa dữ liệu nhận được vào thanh ghi A

END

Trang 18

- Ngoài ra còn các chuẩn truyền UART 9bit để giao tiếp giữa 1 con master và nhiều con Slave

2 Dùng chuẩn truyền đối xứng SPI: ( Serial Peripheral Interface)

- Chuẩn SPI giao tiếp qua MOSI, MISO, SCK, SS

+ MOSI : Master Out Slave In (con chủ truyền qua con tớ) (P1.5)

+ MISO : Master In Slave Out (con tớ truyền qua con chủ) (P1.6)

+ SCK : Shift Clock (xung để dịch dữ liệu sang) (P1.7)

- Chuẩn này có 2 chế độ Nomal mode và Enhanced mode

+ Nomal mode: Không có bộ đệm ghi

+ Enhanced mode: Có bộ đệm ghi dùng để truyền liên tiếp nhiều byte

- Chuẩn này có các thanh ghi chức năng sau:

SPCR (0d5h) SPI Control Register: là thanh ghi điều khiển chế độ SPI

SPIE (Bit7) : bit cho phép ngắt SPI (kết hợp với bit ES trong thanh ghi IE cả hai bit này lên mức 1 thì ngắt SPI được cho phép xảy ra)

SPE (Bit6) : bit cho phép định nghĩa chân giao tiếp SPI (MOSI, MISO, SCK, SS ) DORD (Bit5) : bit cho phép chọn chế độ truyền DORD=1 truyền LSB trước;DORD=0 truyền MSB trước

MSTR (Bit4) : MSTR=1 chọn chế độ Master;MSTR=0 chọn chế độ Slave

CPOL (Bit3) : CPOL=0 chân SCK ở mức thấp khi không truyền dữ liệu; CPOL=1 chân SCK ở mức cao khi không truyền dữ liệu

CPHA (Bit2) : Clock Phase Bit này kết hợp với CPOL để điều khiển xung clock và mối quan hệ truyền nhận giữa con chủ và tớ

SPR0 (Bit1) : Điều khiển tốc độ xung SCK

SPR1 (Bit0) : Điều khiển tốc độ xung SCK

SPSR (0AAH) SPI Statute Register: là thanh ghi trạng thái SPI

SPIF (Bit7) : Cờ ngắt SPI khi truyền xong dữ liệu cờ ngắt SPIF được set lên mức 1, và một ngắt được xảy ra nếu SPIE và ES ở mức 1 Cờ này được xóa bằng cách đọc thanh ghi trạng thái SPSR và sau đó tác động đọc hoặc ghi lên thanh ghi dữ liệu SPDR

WCOL (Bit6) : Khi ở chế độ nomal ENH = 0, Bit này bằng 1 trong suốt quá trình ghi dữ liệu Nó được xóa bằng cách tác động như SPIF Khi ở chế độ Enhanced mode bit này = 1 khi bộ đệm ghi Tx đầy

LDEN (Bit5) : Bit cho phép load dữ liệu khi ở chế độ Enhanced

DISSO (Bit1) := 1 Không cho phép con tớ xuất dữ liệu; = 0 được nhận dữ liệu

ENH (Bit0) := 0 Nomal mode(không có bộ đệm ghi); = 1 Enhanced mode (chế độ có bộ đệm ghi, dùng để truyền nhiều byte nối tiếp)

SPDR (86H) SPI Data Register: là thanh ghi dữ liệu SPI

- Gồm 8 bit từ SPD0 đến SPD7 Chứa các dữ liệu gửi hay nhận

Bài code mẫu cho con Master như sau: dùng chế độ nomal

;TRONG MAIN GUI DU LIEU ;TRONG NGAT DOC DU LIEU VA XOA CO NGAT

#include <AT89s53.inc>

data_example EQU 30H

Trang 19

mov spsr,#10000000b ;bit 1 la dissco =0 dc nhan; bit 0 la chon c/d ENH(1) or normal(0)

MOV data_example,#01010101b ; /* data example */

mov SPCR, #10010101B

;********* Setb SPE cho phep DN chan SPI ***********

mov a,SPCR ;lenh orl or tung bit voi nhau 0 or x = x ; 1 or x = 1 muon set len 1 thi or

;bit can set voi 1 cac bit con lai or voi 0 kq o bi ah

orl a,#01000000b ;SETB SPE, cho pheo dinh nghia chan SPI bit thu 6

of thanh ghi spcr

;************ xoa co truyen spif(7) va wcol(6) ***************

mov a,SPSR ;muon xoa 1 bit ta anl bit do voi 0 cac bit

con lai and voi 1 ko bi ah

anl a,#00111111b ;CLR SPIF xoa co truyen, bit 7 of thanh ghi spsr

; /* clear software transfert flag */ xoa co truyen

mov a,SPSR ;muon xoa 1 bit ta anl bit do voi 0 cac bit

con lai and voi 1 ko bi ah

anl a,#00111111b ;CLR SPIF xoa co truyen, bit 7 of thanh ghi spsr

; /* clear software transfert flag */ xoa co truyen

;*******Doc du lieu nhan duoc**********************

Ngày đăng: 07/04/2015, 14:25

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w