PDA

View Full Version : Ngắt


Heroboss
30-05-2011, 04:49 PM
Anh chị nào giúp em viết dùm đoạn code bằng hợp ngữ ASM dùng ngắt nha. Đề bài là ban đầu led 7 đoạn hiển thị số 0. Sau 1s tăng 1 đơn vị, nếu đến 9 sau 1s trở về 0. Nút N là nút tạm dừng(Pause). Anh chị nào viết dùm em khi viết chú thích các dòng cho em hiểu với nha. Em có gửi mô phỏng bằng protus cho các anh chị. Thanks các anh chị

27041990
31-05-2011, 10:01 PM
CÁC BẠN LÀM ƠN CHO HỎI : SAU KHI NHẬN DỮ LIỆU XONG (ND X 13 Y 12) XỬ LÝ (TÁCH SỐ) CHẠY ĐÈN GIAO THÔNG MÌNH MUỐN GỬI DỮ LIỆU TIẾP THEO ĐỂ THAY ĐỔI ND CŨ THI KHÔNG DƯỢC CODE:
#include <16f877a.h>
#include <string.h>
#include <stdlib.h>
#fuses nowdt,noprotect,nolvp,xt,put
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(a)
#byte porta=0x05
#byte portb=0x06
#byte porte=0x09
#bit a0=porta.0
#bit a1=porta.1
#bit a2=porta.2
#bit e0=porte.0
#bit e1=porte.1
#bit e2=porte.2
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
int i,DENA,DENB,DEM,DA,VA,XA,DB,VB,XB,count,TAMA,j,z,t ,dau,cuoi,done;
char data[90],ndung1[15],ndung2[15];
//GHUONG TRINH NGAT//
#INT_RDA
void ngat()
{data[count]=getc();
count++;}
//CHUONG TRINH CON//

void GOI_DEN();
void main()
{
set_tris_b(0b00000000);
set_tris_a(0b000000);
set_tris_e(0b000);
output_b(0);
output_e(0);
output_a(0);
enable_interrupts(global);//Cho phep ngat toan cuc
enable_interrupts(int_rda);//Cho phep ngat nhan noi tiep


getc();
a0=1;
e0=1;
delay_ms(10000);
XU_LY_ND:
ndung1:
for(i=0;i<strlen(data);i++)
{if (data[i]=='x') z=0;dau=i+2;cuoi=i+3;
for(j=dau;j<cuoi;j++)
{
ndung1[z]=data[j];
z++;}}
ndung:
for(i=0;i<strlen(data);i++)
{if (data[i]=='y') z=0;dau=i+2;cuoi=i+3;
for(j=dau;j<cuoi;j++)
{
ndung2[z]=data[j];
z++;}}

DA=atoi(ndung1);
DB=atoi(ndung2);
//XOA NDUNG///
for(i=0;i<10;i++)
{ndung1[i]=0;
ndung2[i]=0;}
//XOA_DATA//
for (i=0;i<=strlen(data);i++)
{ data[i]=0;}
VA=3;
VB=3;
XA=DB-3;
XB=DA-3;
DEM=4;
CHAY:
DENA=DA;
a0=1;
e0=0;
DENB=XB;
e2=1;

while(!KBHIT())
{HIEN_THI:
for (i=0;i<25;i++)
{
if (DENA<=9) TAMA=0; else TAMA=16;
portb=DENA/10|TAMA;
delay_ms(30);
TAMA=32;
portb=DENA%10|TAMA;
delay_ms(30);
if (DENB<=9) TAMA=0; else TAMA=64;
portb=DENB/10|TAMA;
delay_ms(30);
TAMA=128;
portb=DENB%10|TAMA;
delay_ms(30);
}
DENA=DENA-1;
DENB=DENB-1;
IF (DENA==0||DENB==0)
{ DEM=DEM-1;
GOI_DEN();}
goto HIEN_THI;}
//DIEU KIEN SAI//

a0=0; a1=0; a2=0; e0=0; e1=0; e2=0; a0=1; e0=1;
getc(); delay_ms(5000);
goto XU_LY_ND;}
///CHUONG TRINH GOI DEN///
void GOI_DEN()
{
switch (DEM)
{
case 0:
{ DEM=4;
DENA=DA;
a0=1;
a1=0;
DENB=XB;
e2=1;
e0=0;
break;}
case 1:
{ DENA=VA;
a1=1;
a2=0;
break;}
case 2:
{ DENA=XA;
a2=1;
a0=0;
DENB=DB;
e0=1;
e1=0;
break;}
case 3:
{ DENB=VB;
e2=0;
e1=1;
break;}
}

}