راستش من حدود پنج سال پیش با اسمبلی برنامه صفحه کلید رو به شکل زیر نوشتم که الان هم تستش کردم به خوبی کار میکنه
برنامه هم به این صورته که با فشردن هر کلید که به پورت D میکرو وصله یک عدد متناظر روی پورت B نشون داده میشه
منطق برنامه اینطوریه که ستونها رو خروجی و سطرها رو ورودی تعریف کرده و ابتدا مقدار پورت D رو برابر FF میدیم و سپس به ترتیب با صفر کردن ستون ها , یک به یک سطرها رو چک می کنیم و هر سطری که صفر بود عدد مربوطه رو نشون میدیم.
اما همین برنامه رو توی c که پیاده می کنم (با کدویژن) اصلا جواب نمیده و با فشردن کلیدها هیچ اتفاقی نمی افته
لطفا کمکم کنید .
برنامه اسمبلی:
برنامه c :
برنامه هم به این صورته که با فشردن هر کلید که به پورت D میکرو وصله یک عدد متناظر روی پورت B نشون داده میشه
منطق برنامه اینطوریه که ستونها رو خروجی و سطرها رو ورودی تعریف کرده و ابتدا مقدار پورت D رو برابر FF میدیم و سپس به ترتیب با صفر کردن ستون ها , یک به یک سطرها رو چک می کنیم و هر سطری که صفر بود عدد مربوطه رو نشون میدیم.
اما همین برنامه رو توی c که پیاده می کنم (با کدویژن) اصلا جواب نمیده و با فشردن کلیدها هیچ اتفاقی نمی افته
لطفا کمکم کنید .
برنامه اسمبلی:
کد:
/* * test30.asm * * Created: 12/6/2013 5:41:33 PM * Author: Home */ .include "m32def.inc" .org 00 ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ldi r17,0xff out ddrb,r17 ldi r16,0x0f out ddrd,r16 ldi r16,0xff main: out portd,r16 cbi portd,0 nop sbic pind,4 rjmp l1 ldi r17,0b00000000 out portb,r17 call ring l1: sbic pind,5 rjmp l2 ldi r17,4 out portb,r17 call ring rjmp main l2: sbic pind,6 rjmp l3 ldi r17,8 out portb,r17 call ring rjmp main l3: sbic pind,7 rjmp l4 ldi r17,12 out portb,r17 call ring rjmp main l4: out portd,r16 cbi portd,1 nop sbic pind,4 rjmp l5 ldi r17,1 out portb,r17 call ring rjmp main l5: sbic pind,5 rjmp l6 ldi r17,5 out portb,r17 call ring rjmp main l6: sbic pind,6 rjmp l7 ldi r17,9 out portb,r17 call ring rjmp main l7: sbic pind,7 rjmp l8 ldi r17,13 out portb,r17 call ring rjmp main l8: out portd,r16 cbi portd,2 nop sbic pind,4 rjmp l9 ldi r17,2 out portb,r17 call ring rjmp main l9: sbic pind,5 rjmp l10 ldi r17,6 out portb,r17 call ring rjmp main l10: sbic pind,6 rjmp l11 ldi r17,10 out portb,r17 call ring rjmp main l11: sbic pind,7 rjmp l12 ldi r17,14 out portb,r17 call ring rjmp main l12: out portd,r16 cbi portd,3 nop sbic pind,4 rjmp l13 ldi r17,3 out portb,r17 call ring rjmp main l13: sbic pind,5 rjmp l14 ldi r17,7 out portb,r17 call ring rjmp main l14: sbic pind,6 rjmp l15 ldi r17,11 out portb,r17 call ring rjmp main l15: sbic pind,7 rjmp main ldi r17,15 out portb,r17 call ring rjmp main ring: sbi portb,5 call delay call delay cbi portb,5 call delay call delay dec r17 brne ring ret delay: ldi r20,250 l18:ldi r21,200 l17:nop nop nop nop nop dec r21 brne l17 dec r20 brne l18 ret
کد:
#include <mega32a.h> #include <delay.h> #include <stdio.h> void main(void) { DDRB=0xff; DDRD = 0x0f; PORTD=0xff; while (1) { PORTD=0B11111110; delay_us(20); if (PORTD4==0){ PORTB=0x00; } if (PORTD5==0){ PORTB=0x04; } if (PORTD6==0){ PORTB=0x08; } if (PORTD7==0){ PORTB=0x0c; } PORTD=0B11111101; delay_us(20); if (PORTD4==0){ PORTB=0x01; } if (PORTD5==0){ PORTB=0x05; } if (PORTD6==0){ PORTB=0x09; } if (PORTD7==0){ PORTB=0x0d; } PORTD=0B11111011; delay_us(20); if (PORTD4==0){ PORTB=0x02; } if (PORTD5==0){ PORTB=0x06; } if (PORTD6==0){ PORTB=0x0a; } if (PORTD7==0){ PORTB=0x0e; } PORTD=0B11110111; delay_us(20); if (PORTD4==0){ PORTB=0x03; } if (PORTD5==0){ PORTB=0x07; } if (PORTD6==0){ PORTB=0x0b; } if (PORTD7==0){ PORTB=0x0f; } } }
دیدگاه