PIC Vietnam

Go Back   PIC Vietnam > Mua bán & Trao đổi > Trao đổi ngoài luồng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trao đổi ngoài luồng Các loại vi điều khiển khác, tản mạn của các anh chàng và cô nàng kỹ thuật ...

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 23-02-2012, 11:51 PM   #1
hanguyen92205
Nhập môn đệ tử
 
Tham gia ngày: Nov 2011
Bài gửi: 6
:
Help code asemblly

ai thạo về asemblly có thể xem giúp e cái code natf dc ko
ko có lỗi nhưng dịch file hex ko dc
Code:
;***********************************************************
;
;              Digital Clock with alarm using DS1307
;
;                   For Keil/ A51 Macro Assembler
;
;              Designed By: Ajay Bhargav
;
;              E-mail:      ajay_bhargav@hotmail.com
;
;              WWW:         www.rickeyworld.info
;
;   PS: Use only A51 Macro assembler for linking this file
;       else you can directly use the hex file provided.
;
;       And if in anycase you want to edit the code then
;       you have to use an alternative to write the macros
;       defined in the file. In my opinion you dont need to
;       edit it.
;
;***********************************************************

hold macro
	nop
	nop
	nop
	nop
	endm

disp_str macro string				;Macro for sending string to LCD
	irpc char, <string>
		if nul 'char'
			exitm
		endif
		mov a,#'char'
		lcall data_in
	endm
	endm

build_char macro P1,P2,P3,P4,P5,P6,P7,P8	;Macro for building a custom character
	irp arg, <P1,P2,P3,P4,P5,P6,P7,P8>
		mov a,#arg
		acall data_in
	endm
	endm
	
	sec equ 30h				;second register
	min equ 31h				;minutes register
	hour equ 32h				;hour register
	days equ 33h				;days register
	date equ 34h				;date register
	month equ 35h				;month register
	year equ 36h				;year register
	alarm equ 37h				;alarm register
	sig equ 38h				;signature for data checking in RTC RAM
	ahour equ 39h				;alarm hour register
	amin equ 3Ah				;alarm minute register
	sda equ P1.1				;Serial data pin
	scl equ P1.0				;Serial clock pin
	rw equ p3.6				;read write pin of LCD
	en equ p3.5				;enable pin of LCD
	rs equ p3.7				;register select pin of LCD
	alarm_key equ p3.3			;Alarm set key
	time_key equ p3.2			;Time ser key
	increment equ p1.3			;Increment value
	decrement equ p1.2			;Decrement Value
	alarm_port equ p1.4			;Alarm Buzzer port
	alarm_flag equ 20h			;flag for alarm
	time_flag equ 21h			;flag for time
	ampm_flag equ 22h			;am/pm flag
	alarm_on equ 23h			;Alarm on flag
	alarm_off equ 24h			;alarm off flag
	alarm_ring equ 25h			;alarm ring flag
	alarm_hrs equ 58h			;Alarm hour register
	alarm_min equ 59h			;Alarm Minutes register
	alarm_chk_hour equ 5Ah			;Alarm hour check register
	alarm_chk_min equ 5Bh			;Alarm min check register
	ampm equ 61h				;AM/PM register
	BELL equ 7h				;Bell icon
	SPEAKER_OFF equ 1h			;speaker off icon
	SPEAKER_ON equ 2h			;speaker on icon
	CLOCK equ 3h				;clock icon
	OK equ 4h				;ok icon
	HEART equ 5h				;heart icon
	MUSIC equ 6h				;music icon

	org 0000h				;Starting of main program
	ljmp start

	org 03h					;interrupt for set time
	setb time_flag
	reti

	org 13h					;Interrupt for set alarm
	setb alarm_flag				;and switch off the alarm if on
	jnb alarm_off,hmmm
	setb alarm_port
	mov a,#1h
	lcall command
	mov a,#81h
	lcall command
	mov a,#OK
	acall data_in
	mov r7,#35
	disp_str < Alarm Off!>
	setb tr0
loooop:	jnb tf0,$
	clr tf0
	djnz r7,loooop
	clr tr0
	mov a,#1h
	acall command
	acall disp_const
	setb alarm_off
	setb alarm_on
	clr alarm_flag
	clr alarm_flag
	clr alarm_on
	setb alarm_port
	clr alarm_off
	clr alarm_flag
	clr alarm_ring
hmmm:	reti

start:	
	;clear RAM
	mov R0,#7FH
	clr A
clr_ram:
	mov @R0,A
	djnz R0, clr_ram

	;Init I2C Port
	lcall i2cinit

	mov tmod,#1h				;start routine
	mov sp,#10h
	acall initial
	acall build
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < Nguyen Ngoc Ha >		;Name display
	mov r7,#50
	setb tr0
wloop:	
	jnb tf0,$
	clr tf0
	djnz r7,wloop
	clr time_flag
	clr alarm_flag
	clr alarm_on
	clr ampm_flag
	setb alarm_port

	lcall startc				;Reading invalid hour entry
	mov a,#0d0h					;initialize the RTC if necessary
	lcall send
	lcall ack
	mov a,#02h
	lcall send
	lcall ack
	lcall rstart
	mov a,#0d1h
	acall send
	acall ack
	acall read
	acall nak
	acall stop
	anl a,#1fh
	cjne a,#12h,step
step:
	jnc done
	acall startc				;Reading signature byte if same then no need
	mov a,#0d0h					;of initialization else initialize the RTC
	acall send
	acall ack
	mov a,#08h
	acall send
	acall ack
	acall rstart
	mov a,#0d1h
	acall send
	acall ack
	acall read
	acall nak
	acall stop
	cjne a,#'~',done
	sjmp run
done:
	;acall initial
	;acall disp_const
	mov sec,#00h				;For more information about the RTC DS1307
	mov min,#0h				;Please refer to the datasheet
	mov hour,#52h				;21h for 24 hour format
	mov days,#01h
	mov date,#1h
	mov month,#1h
	mov year,#06h
	mov alarm,#0
	mov sig,#'~'
	mov ahour,#0
	mov amin,#0
	mov r6,#0bh
	mov r0,#sec
	mov r1,#00h
	acall rtc_ini				;initializing RTC if required
run:
	mov ie,#85h
	acall initial
	acall disp_const
run1:
	acall startc				;Actual Starting
	mov a,#0d0h
	acall send
	acall ack
	mov a,#00h
	acall send
	acall ack
	mov r6,#0fh
	acall rstart				;Reading the RCT content
	mov a,#0d1h
	acall send
	acall ack
	mov r0,#40h
here:
	lcall read
	mov @r0,a
	inc r0
	cjne r6,#1,sendack
	acall nak
	sjmp naksent
sendack:
	acall ack
naksent:
	djnz r6,here
	acall stop

	acall display				;Display RTC
	jnb time_flag,noset			;check for time flag if set the set the clock
	clr time_flag
	clr ea
	acall time_set
	clr time_flag
	mov r6,#09h
	mov r0,#30h
	mov r1,#00h
	acall rtc_ini
	clr time_flag
	mov a,#1h
	acall command
	mov a,#81h
	acall command
	mov a,#OK
	acall data_in
	clr time_flag
	disp_str < Time Set!>
	mov r7,#35
	setb tr0
looooop:jnb tf0,$
	clr tf0
	djnz r7,looooop
	clr tr0
	mov a,#1h
	acall command
	acall disp_const
	setb ea
noset:
	jnb alarm_flag,noset1			;check for alarm flag if set then set alarm
	clr alarm_flag
	clr ea
	lcall alarm_set
	setb ea
	setb alarm_on
	clr alarm_flag
	setb alarm_on
noset1:
	jnb alarm_ring,noset2			;check if alarm ring flag is set
	lcall alarm_alarm			;if set then ring the alarm
noset2:	ljmp run1				;Do everything again

;***************************************
;Initializing I2C Bus Communication
;***************************************
i2cinit:
        setb sda
        setb scl
        ret

;****************************************
;ReStart Condition for I2C Communication
;****************************************
rstart:
        clr scl
        setb sda
        setb scl
        clr sda
        ret

;****************************************
;Start Condition for I2C Communication
;****************************************
startc:
        setb scl
        clr sda
        clr scl
        ret

;*****************************************
;Stop Condition For I2C Bus
;*****************************************
stop:
        clr scl
        clr sda
        setb scl
        setb sda
        ret

;*****************************************
;Sending Data to slave on I2C bus
;*****************************************
send:
        mov r7,#08
back:
        clr scl
        rlc a
        mov sda,c
        setb scl
        djnz r7,back
        clr scl
        setb sda
        ret

;*****************************************
;ACK and NAK for I2C Bus
;*****************************************
ack:
        clr sda
        setb scl
        clr scl
        setb sda
        ret

nak:
        setb sda
        setb scl
        clr scl
        setb scl
        ret

;*****************************************
;Receiving Data from slave on I2C bus
;*****************************************
read:
        mov r7,#08
back2:
        clr scl
        setb scl
        mov c,sda
        rlc a
        djnz r7,back2
        clr scl
        setb sda
        ret

recv:						;Recieving data from I2C bus
	lcall read
	lcall ack
	mov @r0,a
	inc r0
	ret

rtc_ini:acall startc				;RTC initialization subroutine
	mov a,#0d0h
	acall send
	acall ack
	mov a,r1
	acall send
	acall ack
rtc_ini_loop:
	mov a,@r0
	acall send
	acall ack
	inc r0
	inc r1
	;acall stop
	djnz r6,rtc_ini_loop
	acall stop
	ret

initial:mov a,#38h				;LCD initialization subroutine
	acall command
	mov a,#0ch
	acall command
	mov a,#01h
	acall command
	mov a,#06h
	acall command
	ret

build:	mov a,#40h				;Building custom character routine
	acall command
	build_char 0h,0h,0h,0h,0h,0h,0h,0h	 ;BELL
	build_char 1h,3h,0fh,0fh,0fh,3h,1h,0h	 ;SPEAKER OFF
	build_char 8h,10h,0h,18h,0h,10h,8h,0h	 ;SPEAKER ON
	build_char 0h,0eh,15h,17h,11h,0eh,0h,0h	 ;CLOCK
	build_char 0h,1h,3h,16h,1ch,8h,0h,0h	 ;OK
	build_char 0ah,1fh,1fh,1fh,0eh,4h,0h,0h	 ;HEART
	build_char 2h,3h,2h,0eh,1eh,0ch,0h,0h	 ;MUSIC
	build_char 4h,0eh,0eh,0eh,1fh,0h,4h,0h	 ;BELL
	ret

display:mov r1,#40h				;Displaying RTC content
	mov a,#0Cah
	acall command
	mov a,@r1
	mov 50h,@r1
	acall disp_val
PASS:	inc r1
	mov a,#0C7h
	acall command
	mov a,@r1
	mov 51h,@r1
	mov alarm_chk_min,@r1
	acall disp_val
PASS1:	inc r1
	mov a,#0c4h
	acall command
	mov a,@r1
	mov 52h,@r1
	mov alarm_chk_hour,@r1
	mov r4,a
	anl a,#1fh
	acall disp_val
	mov a,r4
	anl a,#20h
	cjne a,#00h,pm
	mov a,#0cdh
	acall command
	disp_str <am>
	sjmp pass2
pm:	mov a,#0cdh
	acall command
	disp_str <pm>
PASS2:	inc r1
	mov a,#80h
	acall command
	mov a,@r1
	mov 53h,@r1
	acall day
PASS3:	inc r1
	mov a,#88h
	acall command
	mov a,@r1
	mov 54h,@r1
	acall disp_val
PASS4:	inc r1
	mov a,#8bh
	acall command
	mov a,@r1
	mov 55h,@r1
	acall disp_val
PASS5:	inc r1
	mov a,#8eh
	acall command
	mov a,@r1
	mov 56h,@r1
	acall disp_val
	jnb alarm_on,PASS6
	inc r1
	inc r1
	inc r1
	mov a,@r1
	cjne a,52h,PASS6
	inc r1
	mov a,@r1
	cjne a,51h,PASS6
	setb alarm_ring
	setb alarm_ring
PASS6:	ret

disp_val:					;Display 8-bit Decimal Value
	push acc
	mov r5,a
	anl a,#0f0h
	swap a
	mov dptr,#ascii
	movc a,@a+dptr
	acall data_in
	mov a,r5
	anl a,#0fh
	movc a,@a+dptr
	acall data_in
	pop acc
	ret

disp_const:					;Display constant characters
	mov a,#8ah
	acall command
	mov a,#'/'
	acall data_in
	mov a,#8dh
	acall command
	mov a,#'/'
	acall data_in
	mov a,#0c6h
	acall command
	mov a,#':'
	acall data_in
	mov a,#0c9h
	acall command
	mov a,#':'
	acall data_in
	mov a,#0c0h
	acall command
	mov a,#BELL
	acall data_in
	mov a,#SPEAKER_OFF
	acall data_in
	ret

command:acall busy				;Sending command to LCD
	MOV P2,A
	CLR rs
	CLR rw
	SETB en
	CLR en
	RET

data_in:acall busy				;Sending data to LCD
	SETB rs
	MOV P2,A
	CLR rw
	SETB en
	CLR en
	RET

busy:	;SETB P2.7				;Checking Busy flag
	mov P2, #0FFH
	CLR rs
	SETB rw
wait:	CLR en
	SETB en
	JB P2.7,wait
	RET

day:	push acc				;Displaying day subroutine for RTC
	cjne a,#01,skip
	disp_str < *Sun*>
	ljmp exit
skip:	cjne a,#02,skip2
	disp_str < *Mon*>
	ljmp exit
skip2:	cjne a,#03,skip3
	disp_str < *Tue*>
	ljmp exit
skip3:	cjne a,#04,skip4
	disp_str < *Wed*>
	sjmp exit
skip4:	cjne a,#05,skip5
	disp_str< *Thu*>
	sjmp exit
skip5:	cjne a,#06,skip6
	disp_str < *Fri*>
	sjmp exit
skip6:	disp_str < *Sat*>
exit:	pop acc
	ret

time_set:					;Setting time subroutine
	jnb time_key,$
	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set minutes:>
	mov a,#0c5h
	acall command
	mov a,51h
	acall disp_val
	lcall hexdec
key:	push acc
	mov a,#0c5h
	acall command
	pop acc
	jb increment,chk1
	inc a
	cjne a,#60,ok1
	mov a,#0
ok1:	jnb increment,$
	lcall dechex
	acall disp_val
	lcall hexdec
	sjmp key
chk1:	jb decrement,chk2
	dec a
	cjne a,#0ffh,ok2
	mov a,#59
ok2:	jnb decrement,$
	lcall dechex
	acall disp_val
	lcall hexdec
	sjmp key
chk2:	jb time_key,key

	lcall dechex
	mov min,a
	jnb time_key,$

	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set hours:>
	mov a,#0c5h
	acall command
	mov a,52h
	anl a,#1fh
	acall disp_val
	lcall hexdec
key1:	push acc
	mov a,#0c5h
	acall command
	pop acc
	jb increment,chk3
	inc a
	cjne a,#13,ok3
	mov a,#1
ok3:	jnb increment,$
	lcall dechex
	acall disp_val
	lcall hexdec
	sjmp key1
chk3:	jb decrement,chk4
	dec a
	cjne a,#0,ok4
	mov a,#12
ok4:	jnb decrement,$
	lcall dechex
	acall disp_val
	lcall hexdec
	sjmp key1
chk4:	jb time_key,key1

	lcall dechex
	mov hour,a
	jnb time_key,$

	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set am/pm:>
	mov a,52h
	anl a,#20h
	cjne a,#00h,pm1
	mov a,#0c5h
	acall command
	disp_str <am>
	setb ampm_flag
	sjmp key2
pm1:	mov a,#0c5h
	acall command
	disp_str <pm>
	clr ampm_flag
	
key2:	mov a,#0c5h
	acall command
	jb increment,chk5
	jb ampm_flag,ok5
	setb ampm_flag
	disp_str <am>
	hold
	jnb increment,$
	sjmp key2
ok5:	clr ampm_flag
	disp_str <pm>
	hold
	jnb increment,$
	sjmp key2
chk5:	jb decrement,chk6
	jb ampm_flag,ok6
	setb ampm_flag
	disp_str <am>
	hold
	jnb decrement,$
	sjmp key2
ok6:	clr ampm_flag
	disp_str <pm>
	hold
	jnb decrement,$
	sjmp key2
chk6:	jb time_key,key2
	
	jnb ampm_flag,noam
	mov a,hour
	add a,#40h
	sjmp nopm
noam:	mov a,hour
	add a,#60h
nopm:	mov hour,a
	jnb time_key,$

	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set days:>
	mov a,#0c5h
	lcall command
	mov a,53h
	push acc
	lcall day
	pop acc
key3:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk7
	inc a
	cjne a,#8,ok7
	mov a,#1
ok7:	jnb increment,$
	push acc
	lcall day
	pop acc
	sjmp key3
chk7:	jb decrement,chk8
	dec a
	cjne a,#0,ok8
	mov a,#7
ok8:	jnb decrement,$
	push acc
	lcall day
	pop acc
	sjmp key3
chk8:	jb time_key,key3

	mov days,a
	jnb time_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#CLOCK
	lcall data_in
	disp_str < set date:>
	mov a,#0c5h
	lcall command
	mov a,54h
	lcall disp_val
	lcall hexdec
key4:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk9
	inc a
	cjne a,#32,ok9
	mov a,#1
ok9:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key4
chk9:	jb decrement,chk10
	dec a
	cjne a,#0,ok10
	mov a,#31
ok10:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key4
chk10:	jb time_key,key4
	
	lcall dechex
	mov date,a
	jnb time_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#CLOCK
	lcall data_in
	disp_str < set month:>
	mov a,#0c5h
	lcall command
	mov a,55h
	lcall disp_val
	lcall hexdec
key5:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk11
	inc a
	cjne a,#13,ok11
	mov a,#1
ok11:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key5
chk11:	jb decrement,chk12
	dec a
	cjne a,#0,ok12
	mov a,#12
ok12:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key5
chk12:	jb time_key,key5
	
	lcall dechex
	mov month,a
	jnb time_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#CLOCK
	lcall data_in
	disp_str < set year:>
	mov a,#0c5h
	lcall command
	mov a,56h
	lcall disp_val
	lcall hexdec
key6:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk13
	inc a
	cjne a,#100,ok13
	mov a,#0
ok13:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key6
chk13:	jb decrement,chk14
	dec a
	cjne a,#0ffh,ok14
	mov a,#99
ok14:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key6
chk14:	jb time_key,key6

	jnb time_key,$
	lcall dechex
	mov year,a
	mov alarm,#00
	mov sig,#'~'
	clr time_flag
	ret

alarm_set:					;Setting Alarm Subroutine
	jnb alarm_key,$
	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#BELL
	lcall data_in
	disp_str < set minutes:>
	mov a,#0c5h
	lcall command
	mov a,#30h
	lcall disp_val
	lcall hexdec
akey:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,achk1
	inc a
	cjne a,#60,aok1
	mov a,#0
aok1:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey
achk1:	jb decrement,achk2
	dec a
	cjne a,#0ffh,aok2
	mov a,#59
aok2:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey
achk2:	jb alarm_key,akey

	lcall dechex
	mov alarm_min,a
	jnb alarm_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#BELL
	lcall data_in
	disp_str < set hours:>
	mov a,#0c5h
	lcall command
	mov a,#44h
	anl a,#1fh
	lcall disp_val
	lcall hexdec
akey1:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,achk3
	inc a
	cjne a,#13,aok3
	mov a,#1
aok3:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey1
achk3:	jb decrement,achk4
	dec a
	cjne a,#0,aok4
	mov a,#12
aok4:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey1
achk4:	jb alarm_key,akey1

	lcall dechex
	mov alarm_hrs,a
	jnb alarm_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#BELL
	lcall data_in
	disp_str < set am/pm:>
	mov a,#0c5h
	lcall command
	mov a,alarm_hrs
	anl a,#20h
	cjne a,#20h,its_pm
	disp_str <am>
	setb ampm_flag
	sjmp akey2
its_pm:	disp_str <pm>
	clr ampm_flag
akey2:	mov a,#0c5h
	lcall command
	jb increment,achk5
	jb ampm_flag,aok5
	setb ampm_flag
	disp_str <am>
	hold
	jnb increment,$
	sjmp akey2
aok5:	clr ampm_flag
	disp_str <pm>
	hold
	jnb increment,$
	sjmp akey2
achk5:	jb decrement,achk6
	jb ampm_flag,aok6
	setb ampm_flag
	disp_str <am>
	hold
	jnb decrement,$
	sjmp akey2
aok6:	clr ampm_flag
	disp_str <pm>
	hold
	jnb decrement,$
	sjmp akey2
achk6:	jb alarm_key,akey2
	jnb alarm_key,$
	mov a,alarm_hrs
	jb ampm_flag,anoam
	add a,#60h
	sjmp anopm
anoam:	mov a,alarm_hrs
	add a,#40h
anopm:	mov alarm_hrs,a
	mov ahour,alarm_hrs
	mov amin,alarm_min
	mov r6,#02h
	mov r0,#39h
	mov r1,#09h
	lcall rtc_ini
	mov a,#1h
	lcall command
	mov a,#81h
	lcall command
	mov a,#OK
	lcall data_in
	disp_str < Alarm On!>
	mov a,#0c4h
	lcall command
	mov a,alarm_hrs
	anl a,#1fh
	lcall disp_val
	mov a,#':'
	lcall data_in
	mov a,alarm_min
	lcall disp_val
	mov a,alarm_hrs
	anl a,#20h
	cjne a,#00h,ppm
	disp_str < am>
	sjmp ppass2
ppm:	disp_str < pm>
ppass2:	mov r7,#35
	setb tr0
looop:	jnb tf0,$
	clr tf0
	djnz r7,looop
	clr tr0
	mov a,#1h
	lcall command
	lcall disp_const
	mov a,#SPEAKER_ON
	lcall data_in
	setb alarm_off
	setb alarm_on
	clr alarm_flag
	clr alarm_flag
	ret

alarm_alarm:					;Alarm Ring subroutine
	clr alarm_port
	mov r3,#0ffh
a_loop:	mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop
	setb alarm_port
	mov r3,#0ffh
a_loop1:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop1
	clr alarm_port
	mov r3,#0ffh
a_loop2:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop2
	setb alarm_port
	mov r3,#0ffh
a_loop3:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop3
	clr alarm_port
	mov r3,#0ffh
a_loop4:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop4
	setb alarm_port
	mov r3,#0ffh
a_loop5:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop5
	clr alarm_port
	mov r3,#0ffh
a_loop6:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop6
	setb alarm_port
	ret

dechex:	mov b,#0ah				;Decimal to Hexadecimal conversion
	div ab
	mov 60h,b
	mov b,#10h
	mul ab
	add a,60h
	ret

hexdec:	mov b,#10h				;Hexadecimal to deciaml conversion
	div ab
	mov 60h,b
	mov b,#0ah
	mul ab
	add a,60h
	ret

ascii:						;ASCII lookup table
db	30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

	end
hanguyen92205 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:25 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam