viec xuat ra mot hang dua vao bien ChiSo.
bien ChiSo ban dau dc main gan la 0, la chi so cua byte dau hang + kietm tra neu la hang dau tien (n==0) thi DongBo=0, nguoc lai =1
if (n==SoLanNgat) //neu ngat SoLanNgat lan thi {
n=0; //dem lai tu 0 voi lan sau
if (ChiSo==0) {DongBo = 1;}//DongBo=1 o hang dau tien
else {DongBo = 0;}// =0 cac hang sau
for (k=1; k<=BeRong; k++) //va xuat ra mot hang {
DuLieu = X[ChiSo];
clkIN = 1; //tao mot xung vuong kich vao bo dem ghi dich clkIN = 0;
ChiSo++; //tang chi so len 1,
} //ket thuc for chi so se tang len 4
clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong thoi mot hang clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo
if (ChiSo > (SoByteMang-1)) {ChiSo=0;} }
else //neu n < 100 thi {
n++;//tiep tuc dem so lan ngat }
}
#pragma AREGS
/*---*/void NgatDinhThoi0 (void) interrupt 1 using 1 void NgatDinhThoi0 (void) interrupt 1 using 1
{
XuLiNgatDinhThoi0 (); //dich 1 cot tu trai qua phai }
/*---*//*sau day la chuong trinh chinh /*sau day la chuong trinh chinh
1. NHIEM VU:
+ khoi tao cac gia tri bien:
khoi tao bien dieu khien chi so mang ChiSo de phuc vu xuat mang khoi tao bien dem n de tinh toc do ngat
+ thiet lap cac che do ngat va dinh thoi cho phep ngat toan cuc cho phep ngat dinh thoi 2. GIAI THUAT
3. Danh sach cac bien, du lieu tac dongBit cho phep ngat toan cuc: Ngat Bit cho phep ngat toan cuc: Ngat
Bit cho phep ngat dinh thoi 0: Ngatdinhthoi0 Bien trung gian xac dinh tri so mang: chiso Bien dem so lan say ra ngat: n
Gia tri thanh ghi dinh thoi */
void main (void){ //khoi tao
ChiSo = 0; //khoi tao chi so cua mang n = 0; //khoi tao bien dem so lan ngat //thiet lamp che do cho dinh thoi
CheDoDinhThoi = (CheDoDinhThoi & 0xf0) | 0x02; // thiet lap che do tu dong lap lai 8 bit cho T0 ByteCaoDinhThoi0 = 256 - SoDemDinhThoi;
// nap lai cho TL0 de dem SoDemDinhThoi xung nhip he thong ByteThapDinhThoi0 = ByteCaoDinhThoi0;
NgatDinhthoi0 = 1;//cho phep ngat dinh thoi 0 BatDinhThoi0 = 1; // khoi dong dinh thoi 0 //doi
while (1); }
Bài 6:
/*chuong trinh thu nghiem lmd6 --- "CHAY TOT !!!" dieu khien mach quet led co so do phan cung nhu ... dieu khien quet led bang ngat dinh thoi
tao hieu ung dich chuyen ngang
moi khi say ra ngat dinh thoi 0 chuong trinh se xuat ra mot hang dua vao bien ChiSo va chot giu. cu the viec do la
- xuat ra lien tuc cac byte cua hang do xe ke xung clkIN- sau khi xuat het cac byte thi xuat ra mot xung clkOUT - sau khi xuat het cac byte thi xuat ra mot xung clkOUT ChiSo la bien toan cuc dc khoi tao do chuong trinh chinh
neu ChiSo bang 0, tuc la hang dau tien dc xuat, khi ay xuat ra DongBo = 1 neu ChiSo khac 0 thi xuat ra mot ra DongBo = 0
sau khi xuat het so byte kiem tra neu ChiSo = 63 thi dua tro ve 0 cong P1 xuat ra song song DuLieu
mang char dc khai bao o ngoai */
#include <reg51.h>
//cac chan tin hieu dieu khien
sbit clkIN = 0xB3;//tao xung dich vao bo dem ghi dich sfr DuLieu = 0x90;
sbit clkOUT = 0xB4;//tao xung xuat ra dong thoi cua cac bo dem
sbit DongBo = 0xB5;//tao xung dong bo hang dau tien, chan nay noi toi dau vao bo ghi dich quet hang //cac thanh ghi va bit chuc nang dac biet
sfr CheDoDinhThoi = 0x89; sfr ByteThapDinhThoi0 = 0x8A; sfr ByteCaoDinhThoi0 = 0x8C; sbit BatDinhThoi0 = 0x8C;
#define SoByteMang 64 //BeRong * ChieuCao = so byte cua mang hien thi X #define NgatDu 5 //so lan say ra ngat dinh thoi
#define SoDemDinhThoi 256 //so xung nhip dinh thoi can dem // bang du lieu khoi tao
char code KhoiTao[SoByteMang] ={0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00, 0x80,0x01,0x00,0x00, 0xc0,0x01,0x00,0x00, 0xe0,0x01,0x00,0x00, 0xb0,0xff,0xff,0x3f, 0x98,0xff,0xff,0x3f, 0x0c,0x00,0x00,0x30, 0x0c,0x00,0x00,0x30, 0x98,0xff,0xff,0x3f, 0xb0,0xff,0xff,0x3f, 0xe0,0x01,0x00,0x00, 0xc0,0x01,0x00,0x00, 0x80,0x01,0x00,0x00, 0x00,0x01,0x00,0x00, 0x00,0x00,0x00,0x00 }; char idata X[SoByteMang];
char bdata ThanhGhiTrungGian; //day la thanh ghi trung gian truy cap bit sbit BitThapNhat= ThanhGhiTrungGian ^ 0;
sbit BitCaoNhat = ThanhGhiTrungGian ^ 7; bit BitRa;//bit chua bit di ra tu bit dau hang bit BitVao;//bit chua bit di Vao cuoi hang
/*---*/
int ChiSo,DemSoLanNgatT0;//chi so mang va bien n de dem so lan say ra ngat int SoDongDaXuat;
/*---*/
#pragma NOAREGS // ko su dung cac ky hieu thanh ghi tuyet doi cho cac // ham duoc goi tu dich vu ngat
/*---*/
static void XuLiNgatDinhThoi0 (void) //xuat ra mot hang thu x /*day la chuong chinh con phuc vu ngat dinh thoi 0
nhiem vu cua chuong trinh con nay la: - dem so lan say ra ngat dinh thoi qua bien n - khi n < SoLanNgat thi tang len 1 ket thuc - khi n = SoLanNgat thi xuat ra hang ket thuc viec xuat ra mot hang dua vao bien ChiSo.
bien ChiSo ban dau dc main gan la 0, la chi so cua byte dau hang + kietm tra neu la hang dau tien (n==0) thi DongBo=0, nguoc lai =1 + su dung vong lap voi so vong la so byte cua hang
moi chu trinh lap se xuat ra mot byte, va clkIN, tang ChiSo
+ ket thuc vong lap thi xuat ra mot xung chot clkOUT, va chi so da tro den hang tiep theo + kiem tra neu xuat het mang (chiso=SoByteMang) thi gan lai chiso=0
int k; //bien dem so byte trong mot hang
if (++DemSoLanNgatT0==NgatDu) //neu ngat SoLanNgat lan thi {
DemSoLanNgatT0=0; //dem lai tu 0 voi
lan sau
SoDongDaXuat++;
if (ChiSo==0) {DongBo = 1;}//DongBo=1 o hang dau tien
else {DongBo = 0;}// =0 cac hang sau
for (k=1; k<=BeRong; k++) //va xuat ra mot hang {
DuLieu = X[ChiSo];
clkIN = 1; //tao mot xung vuong kich vao bo dem ghi dich clkIN = 0;
ChiSo++; //tang chi so len 1,
} //ket thuc for chi so se tang len 4
clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong thoi mot hang clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo
if (ChiSo > (SoByteMang-1)) {ChiSo=0;} }
}
#pragma AREGS
/*---*/void NgatDinhThoi0 (void) interrupt 1 using 1 void NgatDinhThoi0 (void) interrupt 1 using 1
{
XuLiNgatDinhThoi0 (); //dich 1 cot tu trai qua phai }
/*---*/
void Quay1DiemCho1Hang (int SoHang)//so hang bat dau tu 1 den 16 /*day la thu tuc dich chuyen mot hang
thu tuc nay se lam cho mot hang quay di mot cot theo giai thuat sau: - ve dau hang