หัวข้อ: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 16, 2011, 04:58:30 pm
คือผมจะทำโปรเจ็คจบ เกี่ยวกับ RFID คือ ผมจะใช้ โมดูล ID-20 RFID Reader 125 Khz เป็นตัวอ่านการ์ด ซึ่งจะนำไปใช้เพียงขาเดียวคือขา 9 ซึ่งขานี้จะส่งรหัสประจำแต่ละบัตรออกมาเป็น ASCII แล้วจะเอาขาที่ 9 ไปเข้า mcs-51 ยังไงครับ เพื่อให้ mcs-51 สั้งงานในเงื่อนใขต่างๆ ที่เราต้องการ เช่น การ์ดใบที่ 1 สั่ง on P0.0 การ์ก ใบที่ 2 สั่ง ON P0.1 ประมาณนี้ครับ (mcs-51 = 89v51rd2 ใช้ Assembly ครับ ) ขอความช่วยเหลือด้วยครับ thank2 thank2 (http://wara.com/userfiles/image/RFID1/5.jpg)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ กุมภาพันธ์ 16, 2011, 10:56:46 pm
ในส่วนของ program ไม่ยากครับถ้าเป็นแบบที่ว่ามา แต่ที่ว่าขา9มันส่ง ascii ออกมาน่ะมังส่งมาแบบไหน baud เท่าไร ส่งมากี่ byte ถ้าไม่รู้ ก็ไปต่อไม่ได้ครับ... :)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 17, 2011, 12:36:17 am
เพิ่มเติมครับ baud 9600 (http://wara.com/userfiles/image/RFID1/2.jpg) (http://wara.com/userfiles/image/RFID1/6.jpg) thank2 thank2 thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 17, 2011, 12:44:25 am
(http://wara.com/userfiles/image/RFID1/4.jpg) (http://wara.com/userfiles/image/RFID1/7.jpg) ลองการ์ดหลายใบ (http://wara.com/userfiles/image/RFID1/3.jpg)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ กุมภาพันธ์ 17, 2011, 10:47:49 am
สรุปให้ผมทีว่า.... card ใบแรก กับ ใบที่สอง ข้อมูลเป็นอะไรบ้าง ต้องประมวลผลยังไง เอามาให้ผมดูแบบนี้...ผมแนะนำยากครับ ผมไม่มีอุปกรณ์ลอง...
แต่ผมสรุปว่า มีข้อมูล 14 byte stx = 1 byte data = 10 byte check sum = 2 byte cr+lf = 2 byte etx = 1 byte
ถูกมั๊ยครับ......
เอาข้อมูลที่รับได้ไปคำนวนได้เลย หากไม่ต้องการ คำนวณ check sum แต่ถ้าต้องการ check sum มันต้องเอา ascii ไปแปลงเป็น hex ก่อน แล้วค่อยไป ex-or กันอีกที ปัญหาคือคุณรุ้และเคยเขียน asm มาบ้างหรือป่าว...???
:)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 05:12:47 pm
ตอนนี้ ผมเก็บข้อมูลเข้าไปที่ A แต่ไม่รู้จะเปรียบเทียบข้อมูลการ์ดยังไง ผมใช้คำสั่ง CJNE เป็นตัวเปรัยบเทียบ (ไม่รู้ผมเข้าใจถูกหรือป่าวครับหรือสามารถใช้คาสั่งอื่นเพื่อเปรียบเทียบได้)
START: MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH ;9600 SETB TR1 CLR RI MOV P0,#00H ; OFF P0 LOOP1: JNB RI,$ MOV A,SBUF ;เก็บค่าที่อ่านได้จากการ์ดเข้าไปที่ A CLR RI CJNE A,.................,LOOP2 <<ต่อมาไม่รู้จะเอาค่าใน A มาเปรียบเทียบข้อมูลการ์ดใบที่ 1 ได้ไงครับ เช่นค่าที่ออกมาจากบัตร คือ 1200A8DA2F4F SETB P0.0 ; ON P0.0 เปิดหลอดไฟหลอดที่ 1
LOOP2: CJNE A,.................,LOOP1 ;เปรียบเทียบ ใบที่ 2 SETB P0.1 .. .. .. ..
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 06:38:53 pm
คือตอนนี้ ที่ต้องการคือ เราเขียนโปรแกรมเก็บ ID เข้าไปในส่วน source code แล้วเมื่อมีการ์ดมาก็อ่านแล้วเอา ID ที่อ่านได้ ไปเช็ค กับ ID ใน source code ที่เราเขียนไว้แล้ว ว่าตรงกันหรือไม่ ครับ thank2 thank2 thank2 thank2 thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 06:50:58 pm
อ้างอิงข้อมูลจาก http://wara.com/article-747.html (http://wara.com/article-747.html)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ กุมภาพันธ์ 18, 2011, 07:04:22 pm
ให้เก็บลง ram แบบ arry ครับ จองพื้นที่ไว้ 14 byte ตามความยาวข้อมูล แล้วใช้ index pointer R0 ในการเปรียบเทียบ ข้อมูลกับค่าตัวแปรที่เรากำหนดไว้ เช่น start_point_buffer equ 040h
loop: mov r0 , #start_point_buffer acall 232_receive ;--- receive routine 1 byte return data to acc mov @r0 , a inc r0 cjne r0 , #start_point_buffer+14 , loop
chk_data_rec:
mov r0 , #start_point_buffer cjne @r0 , #ค่าของ stx , start_byte_error mov r0 , #start_point_buffer cjne @r0 , #ค่าของ card1 data1 , chk_card2 inc r0 cjne @r0 , #ค่าของ card1 data2 , chk_card2 inc r0 cjne @r0 , #ค่าของ card1 data3 , chk_card2 ; ; ; ; inc r0 cjne @r0 , #ค่าของ card1 data10 , chk_card2 inc r0 cjne @r0 , #ค่าของ chksum1 , chk_card2 nc r0 cjne @r0 , #ค่าของ chksum2 , chk_card2 nc r0 cjne @r0 , #ค่าของ etx , end_byte_error
;all data card 1 ok
setb p1.0 ajmp loop
chk_card2:
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 09:32:11 pm
ขอบคุณมากครับ แต่ผมติดปัญหาตรงที่ ว่า เวลา เอาการ์ดใบที่ไม่ได้คีย์ข้อมูลไว้มาทาบที่เครื่องอ่าน ก่อนที่จะเอาใบที่มีการคีย์ไว้ มาทาบ เวลาเอาใบที่คีย์ข้อมูลไว้มาทาบโปรแกรมจะไม่ยอมรับการ์ดใบนี้ คือต้องทาบซ้ำ ๆ ไปประมาณ 5-8 ครั้ง ถึงจะได้ thank2 แต่ถ้าเอาใบที่คีย์ข้อมูลไว้แล้วมาทาบเป็นใบแรกก็จะทำงานปกติ หรือเวลาเช็ค data ที่ตำแหน่งต่าง แล้วเกิด error ผมต้องทำอะไรก่อนที่จะทำการอ่านครั้งใหม่หรือป่าวครับ หรือผมต้องคืนค่าอะไรอีกหรือป่าวครับ thank2 thank2 thank2 thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ กุมภาพันธ์ 18, 2011, 09:52:09 pm
มัน error ก็ไม่ทำงานไงครับ กลับเข้า loop ใหม่ไม่มีอะไรเกิดขึ้น... ผมก็ งงๆ นะ ปัญหาหามันเกิดจาก ตัว module rfid หรือป่าว เอา data ตอน error มาให้ดูหน่อย...
แล้ว card ที่คีกับไม่คี ท่านจะเอามาลองทำไมถ้ามันเกิดปัญหา..... ??? มันเกิน concept งานที่บอกไว้แล้วนะครับ....
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 10:05:05 pm
;############################## ;############################## CPU "8051.TBL" HOF "INT8" ORG 0
start_point_buffer: EQU 040H
START: MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH SETB TR1 CLR RI START2: MOV R0,#start_point_buffer
LOOP1: JNB RI,$ MOV A,SBUF CLR RI
LOOP2: MOV @R0,A INC R0 CJNE R0,#start_point_buffer+14,LOOP1
CHK_CARD1: MOV R0,#start_point_buffer CJNE @R0,#02H,START2 ;STX=02H MOV R0,#start_point_buffer INC R0 CJNE @R0,#30H,START ;0 INC R0 CJNE @R0,#39H,START ;9 INC R0 CJNE @R0,#30H,START ;0 INC R0 CJNE @R0,#30H,START ;0 INC R0 CJNE @R0,#38H,START ;8
INC R0 CJNE @R0,#41H,START ;A INC R0 CJNE @R0,#38H,START ;8 INC R0 CJNE @R0,#36H,START ;6 INC R0 CJNE @R0,#33H,START ;3
INC R0 CJNE @R0,#31H,START ;1 INC R0 CJNE @R0,#33H,START ;3 INC R0 CJNE @R0,#34H,START ;4 CLR P0.0 ACALL DELAY MOV P0,#0FFH SJMP START
;####END MIAN#### DELAY: MOV R2,#200 DEL1: MOV R3,#80 DEL2: MOV R4,#80 DJNZ R4,$ DJNZ R3,DEL2 DJNZ R2,DEL1 RET
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 10:18:23 pm
ผมไม่ได้เช็คซัม ข้อมูล STX = 20H ข้อมูลการ์ดใบแรก 09008A863134 ใบที่ 2 คือ 23000A46523D ;############################## ;############################## CPU "8051.TBL" HOF "INT8" ORG 0
start_point_buffer: EQU 040H
START: MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH SETB TR1 CLR RI START2: MOV R0,#start_point_buffer
LOOP1: JNB RI,$ MOV A,SBUF CLR RI
LOOP2: MOV @R0,A INC R0 CJNE R0,#start_point_buffer+14,LOOP1
CHK_CARD1: MOV R0,#start_point_buffer CJNE @R0,#02H,START2 ;STX=02H MOV R0,#start_point_buffer INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#39H,CHK_CARD2 ;9 INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#38H,CHK_CARD2 ;8
INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#38H,CHK_CARD2 ;8 INC R0 CJNE @R0,#36H,CHK_CARD2 ;6 INC R0 CJNE @R0,#33H,CHK_CARD2 ;3
INC R0 CJNE @R0,#31H,CHK_CARD2 ;1 INC R0 CJNE @R0,#33H,CHK_CARD2 ;3 INC R0 CJNE @R0,#34H,CHK_CARD2 ;4 CLR P0.0 ACALL DELAY MOV P0,#0FFH SJMP START
CHK_CARD2: MOV R0,#start_point_buffer CJNE @R0,#02H,START2 ;STX=02H MOV R0,#start_point_buffer INC R0 CJNE @R0,#32H,START ;2 INC R0 CJNE @R0,#33H,START ;3 INC R0 CJNE @R0,#30H,START ;0 INC R0 CJNE @R0,#30H,START ;0 INC R0 CJNE @R0,#30H,START ;0
INC R0 CJNE @R0,#41H,START ;A INC R0 CJNE @R0,#34H,START ;4 INC R0 CJNE @R0,#36H,START11 ;6 INC R0 CJNE @R0,#35H,START11 ;5
INC R0 CJNE @R0,#32H,START11 ;2 INC R0 CJNE @R0,#33H,START11 ;3 INC R0 CJNE @R0,#44H,START11 ;D CLR P0.1 ACALL DELAY MOV P0,#0FFH
AJMP START
START11: AJMP START
;####END MIAN#### DELAY: MOV R2,#200 DEL1: MOV R3,#80 DEL2: MOV R4,#80 DJNZ R4,$ DJNZ R3,DEL2 DJNZ R2,DEL1 RET
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ กุมภาพันธ์ 18, 2011, 10:43:11 pm
แล้วตอนนี้ปัญหามีอะไรบ้างครับ... :)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 18, 2011, 11:02:18 pm
ตอนนี้ ถ้าคีย์ทุกใบแล้วก็ไม่น่ามีปัญหาอะไรครับ แต่ ไม่รู้ว่าถ้า คีย์ 24 ใบไม่รู้จะได้ป่าว แค่ใบเดียวกินไป 30 บรรทัด ถ้า 24 ใบก็เยอะพอสมควร พอจะมีแบบสั้นๆ หรือป่าว แต่ถ้าไม่มีก็ไม่เป็นไรครับ แนวคิดผมผมคิดว่าถ้า data ตำแหน่งไหนเหมือนกันก็ไม่ต้อง เช็คข้ามไปเลย ไม่รู้จะได้ป่าว แค่นี้ก็น่าจะพอครับ งานต่อไปก็คือเขียน PLC ครับ ขอมคุณท่าน JUB มากๆครับ thank2 wav!! thank2 :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ กุมภาพันธ์ 18, 2011, 11:27:41 pm
จะใช้กี่ใบก็ต้องเขียนแบบนี้ครับ ถ้าจะให้สั้นๆ ต้องใช้วิธีเปิดตารางครับ คือ ทำตารางข้อมูลของ card แต่ละใบไว้ แล้วเวลาตรวจสอบ card ให้เขี่ยนโปรแกรมย่อยขึ้นมา เพื่อนำค่าจาก buffer มาเทียบกับค่าในตารางที่อยู่ใน programmory ที่เราได้ทำไว้ เวลาแก้ไขก็ทำได้ง่ายด้วยครับ.... คงพอมองภาพออกนะ.... :) อันนี้ผมแก้ bug ให้นิดหน่อย ;############################## ;##############################
START_POINT_BUFFER EQU 040H
CSEG AT 0000H AJMP INITIAL
CSEG AT 0050H INITIAL: MOV SP,#060H MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH SETB TR1
;//******************//; ;//* WAIT RFID DATA *//; ;//******************//; WAIT_DATA: MOV R0,#START_POINT_BUFFER WAIT_DATA1: CLR RI JNB RI,$ MOV @R0,SBUF INC R0 CJNE R0,#START_POINT_BUFFER+14,WAIT_DATA1 ;//****************//; ;//* CHECK CARD 1 *//; ;//****************//; CHK_CARD1: MOV R0,#START_POINT_BUFFER CJNE @R0,#02H,START_TX_ERROR ;STX=02H INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#39H,CHK_CARD2 ;9 INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#38H,CHK_CARD2 ;8
INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#38H,CHK_CARD2 ;8 INC R0 CJNE @R0,#36H,CHK_CARD2 ;6 INC R0 CJNE @R0,#33H,CHK_CARD2 ;3
INC R0 CJNE @R0,#31H,CHK_CARD2 ;1 INC R0 CJNE @R0,#33H,CHK_CARD2 ;3 INC R0 CJNE @R0,#34H,CHK_CARD2 ;4 CLR P1.0 ACALL DELAY SETB P1.0 AJMP WAIT_DATA START_TX_ERROR: ACALL CLR_BUFFER AJMP WAIT_DATA ;//****************//; ;//* CHECK CARD 2 *//; ;//****************//; CHK_CARD2: MOV R0,#START_POINT_BUFFER+1 CJNE @R0,#32H,OUT_OF_DATA ;2 INC R0 CJNE @R0,#33H,OUT_OF_DATA ;3 INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0 INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0 INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0
INC R0 CJNE @R0,#41H,OUT_OF_DATA ;A INC R0 CJNE @R0,#34H,OUT_OF_DATA ;4 INC R0 CJNE @R0,#36H,OUT_OF_DATA ;6 INC R0 CJNE @R0,#35H,OUT_OF_DATA ;5
INC R0 CJNE @R0,#32H,OUT_OF_DATA ;2 INC R0 CJNE @R0,#33H,OUT_OF_DATA ;3 INC R0 CJNE @R0,#44H,OUT_OF_DATA ;D CLR P1.1 ACALL DELAY SETB P1.1 AJMP WAIT_DATA
OUT_OF_DATA: ACALL CLR_BUFFER AJMP WAIT_DATA
;//***** CLR RAM BUFFER *****//; CLR_BUFFER: MOV R0,#START_POINT_BUFFER CLR A CLR_BUFFER1: MOV @R0,A INC R0 CJNE R0,#START_POINT_BUFFER+14,CLR_BUFFER1 RET ;//***** DELAY ROUTINE *****//; DELAY: MOV R2,#200 DEL1: MOV R3,#80 DEL2: MOV R4,#80 DJNZ R4,$ DJNZ R3,DEL2 DJNZ R2,DEL1 RET END
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ กุมภาพันธ์ 19, 2011, 12:34:31 pm
thank2 ครับ ขอบคุณมากครับ thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 01, 2011, 11:51:48 pm
ขอความช่วยเหลืออีกรอบครับ คือตอนนี้อาจารย์ บอกว่า โปรเจ็คผมมันตายตัวไป ก็คือมันไม่สามารถให้ผู้ใช้เปลี่ยนการ์ดเองได้ในกรณที่การ์ดใบเดิมหายไป อาจารย์ก็เลยแนะนำว่าให้แก้ใขจุดนี้ ผมก็เลยมีแนวคิดว่าจะใช้ EEPROM ในการเก็บข้อมูลรหัสบัตร 24 ใบ (อาจจะใช้ Master การ์ด ในการสั่งเปลี่ยนบัตรใบใหม่ หรือ ใช้ สวิตช์กด เพื่อสั่งเปลี่ยนบัตร ) เรื่องการใช้งาน EEPROM ผมไม่เคยเรียนมาเลยคือไม่รู้อะไรเลย ตอนนี้ผมใช้ p0 กับ p2 แสดง 7-Segment หมายเลขบัตรแต่ละใบ 1-24 และ p 1 ใช้ควบคุม plc และ p 3.0 เป็นขารับข้อมูลจากตัวอ่าน RFID ก็จะเหลือแค่ p3.1-3.7 ที่ใช้ได้ ขอคำแนะนำด้วยครับ จนจริงๆครับ thank2 thank2 ;############################## ;# AUTOMATIC CAR PARKING # ;############################## CPU "8051.TBL" HOF "INT8" ORG 0 START_POINT_BUFFER: EQU 040H INITIAL: MOV SP,#060H MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH SETB TR1 MOV P0,#0C0H MOV P2,#0C0H MOV P1,#0FFH ;//******************//; ;//* WAIT RFID DATA *//; ;//******************//; WAIT_DATA: MOV R0,#START_POINT_BUFFER WAIT_DATA1: CLR RI JNB RI,$ MOV @R0,SBUF INC R0 CJNE R0,#START_POINT_BUFFER+14,WAIT_DATA1 ;//******************//; ;//* CHECK CARD 1 *//; ;//******************//; CHK_CARD1: MOV R0,#START_POINT_BUFFER CJNE @R0,#02H,START_TX_ERROR ;STX=02H MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD2 ;2 INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#39H,CHK_CARD2 ;9 INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#46H,CHK_CARD2 ;F INC R0 CJNE @R0,#39H,CHK_CARD2 ;9 INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#46H,CHK_CARD2 ;F INC R0 CJNE @R0,#45H,CHK_CARD2 ;E INC R0 CJNE @R0,#36H,CHK_CARD2 ;6 MOV P0,#0F9H MOV P1,#0FEH ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA START_TX_ERROR: ACALL CLR_BUFFER AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 2 *//; ;//******************//; CHK_CARD2: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD3 ;2 INC R0 CJNE @R0,#41H,CHK_CARD3 ;A INC R0 CJNE @R0,#30H,CHK_CARD3 ;0 INC R0 CJNE @R0,#30H,CHK_CARD3 ;0 INC R0 CJNE @R0,#39H,CHK_CARD3 ;9 INC R0 CJNE @R0,#41H,CHK_CARD3 ;A INC R0 CJNE @R0,#46H,CHK_CARD3 ;F INC R0 CJNE @R0,#41H,CHK_CARD3 ;A INC R0 CJNE @R0,#39H,CHK_CARD3 ;9 INC R0 CJNE @R0,#33H,CHK_CARD3 ;3 INC R0 CJNE @R0,#44H,CHK_CARD3 ;D INC R0 CJNE @R0,#39H,CHK_CARD3 ;9 MOV P0,#0A4H MOV P1,#0FDH ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 3 *//; ;//******************//; CHK_CARD3: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD4 ;2 INC R0 CJNE @R0,#41H,CHK_CARD4 ;A INC R0 CJNE @R0,#30H,CHK_CARD4 ;0 INC R0 CJNE @R0,#30H,CHK_CARD4 ;0 INC R0 CJNE @R0,#39H,CHK_CARD4 ;9 INC R0 CJNE @R0,#44H,CHK_CARD4 ;D INC R0 CJNE @R0,#46H,CHK_CARD4 ;F INC R0 CJNE @R0,#44H,CHK_CARD4 ;D INC R0 CJNE @R0,#42H,CHK_CARD4 ;B INC R0 CJNE @R0,#33H,CHK_CARD4 ;3 INC R0 CJNE @R0,#46H,CHK_CARD4 ;F INC R0 CJNE @R0,#39H,CHK_CARD4 ;9 MOV P0,#0B0H MOV P1,#0FCH ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 4 *//; ;//******************//; CHK_CARD4: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD5 ;2 INC R0 CJNE @R0,#41H,CHK_CARD5 ;A INC R0 CJNE @R0,#30H,CHK_CARD5 ;0 INC R0 CJNE @R0,#30H,CHK_CARD5 ;0 INC R0 CJNE @R0,#39H,CHK_CARD5 ;9 INC R0 CJNE @R0,#44H,CHK_CARD5 ;D INC R0 CJNE @R0,#45H,CHK_CARD5 ;E INC R0 CJNE @R0,#39H,CHK_CARD5 ;9 INC R0 CJNE @R0,#32H,CHK_CARD5 ;2 INC R0 CJNE @R0,#42H,CHK_CARD5 ;B INC R0 CJNE @R0,#37H,CHK_CARD5 ;7 INC R0 CJNE @R0,#35H,CHK_CARD5 ;5 MOV P0,#99H MOV P1,#0FBH ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 5 *//; ;//******************//; CHK_CARD5: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD6 ;2 INC R0 CJNE @R0,#41H,CHK_CARD6 ;A INC R0 CJNE @R0,#30H,CHK_CARD6 ;0 INC R0 CJNE @R0,#30H,CHK_CARD6 ;0 INC R0 CJNE @R0,#39H,CHK_CARD6 ;9 INC R0 CJNE @R0,#44H,CHK_CARD6 ;D INC R0 CJNE @R0,#46H,CHK_CARD6 ;F INC R0 CJNE @R0,#44H,CHK_CARD6 ;D INC R0 CJNE @R0,#43H,CHK_CARD6 ;C INC R0 CJNE @R0,#44H,CHK_CARD6 ;D INC R0 CJNE @R0,#38H,CHK_CARD6 ;8 INC R0 CJNE @R0,#37H,CHK_CARD6 ;7 MOV P0,#92H MOV P1,#0FAH ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 6 *//; ;//******************//; CHK_CARD6: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD7 ;2 INC R0 CJNE @R0,#41H,CHK_CARD7 ;A INC R0 CJNE @R0,#30H,CHK_CARD7 ;0 INC R0 CJNE @R0,#30H,CHK_CARD7 ;0 INC R0 CJNE @R0,#39H,CHK_CARD7 ;9 INC R0 CJNE @R0,#44H,CHK_CARD7 ;D INC R0 CJNE @R0,#45H,CHK_CARD7 ;E INC R0 CJNE @R0,#39H,CHK_CARD7 ;9 INC R0 CJNE @R0,#46H,CHK_CARD7 ;F INC R0 CJNE @R0,#34H,CHK_CARD7 ;4 INC R0 CJNE @R0,#41H,CHK_CARD7 ;A INC R0 CJNE @R0,#41H,CHK_CARD7 ;A MOV P0,#82H MOV P1,#0F9H ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 7 *//; ;//******************//; CHK_CARD7: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD8 ;2 INC R0 CJNE @R0,#41H,CHK_CARD8 ;A INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#39H,CHK_CARD8 ;9 INC R0 CJNE @R0,#42H,CHK_CARD8 ;B INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#42H,CHK_CARD8 ;B INC R0 CJNE @R0,#42H,CHK_CARD8 ;B INC R0 CJNE @R0,#34H,CHK_CARD8 ;4 INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#45H,CHK_CARD8 ;E MOV P0,#0F8H MOV P1,#0F8H ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 8 *//; ;//******************//; CHK_CARD8: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD9 ;2 INC R0 CJNE @R0,#41H,CHK_CARD9 ;A INC R0 CJNE @R0,#30H,CHK_CARD9 ;0 INC R0 CJNE @R0,#30H,CHK_CARD9 ;0 INC R0 CJNE @R0,#39H,CHK_CARD9 ;9 INC R0 CJNE @R0,#42H,CHK_CARD9 ;B INC R0 CJNE @R0,#35H,CHK_CARD9 ;5 INC R0 CJNE @R0,#43H,CHK_CARD9 ;C INC R0 CJNE @R0,#42H,CHK_CARD9 ;B INC R0 CJNE @R0,#34H,CHK_CARD9 ;4 INC R0 CJNE @R0,#35H,CHK_CARD9 ;5 INC R0 CJNE @R0,#39H,CHK_CARD9 ;9 MOV P0,#80H MOV P1,#0F7H ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 9 *//; ;//******************//; CHK_CARD9: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD10 ;2 INC R0 CJNE @R0,#41H,CHK_CARD10 ;A INC R0 CJNE @R0,#30H,CHK_CARD10 ;0 INC R0 CJNE @R0,#30H,CHK_CARD10 ;0 INC R0 CJNE @R0,#39H,CHK_CARD10 ;9 INC R0 CJNE @R0,#42H,CHK_CARD10 ;B INC R0 CJNE @R0,#32H,CHK_CARD10 ;2 INC R0 CJNE @R0,#44H,CHK_CARD10 ;D INC R0 CJNE @R0,#46H,CHK_CARD10 ;F INC R0 CJNE @R0,#44H,CHK_CARD10 ;D INC R0 CJNE @R0,#36H,CHK_CARD10 ;6 INC R0 CJNE @R0,#31H,CHK_CARD10 ;1 MOV P0,#90H MOV P1,#0F6H ACALL DELAY MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 10 *//; ;//******************//; CHK_CARD10: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD11 ;2 INC R0 CJNE @R0,#43H,CHK_CARD11 ;C INC R0 CJNE @R0,#30H,CHK_CARD11 ;0 INC R0 CJNE @R0,#30H,CHK_CARD11 ;0 INC R0 CJNE @R0,#34H,CHK_CARD11 ;4 INC R0 CJNE @R0,#37H,CHK_CARD11 ;7 INC R0 CJNE @R0,#42H,CHK_CARD11 ;B INC R0 CJNE @R0,#44H,CHK_CARD11 ;D INC R0 CJNE @R0,#39H,CHK_CARD11 ;9 INC R0 CJNE @R0,#39H,CHK_CARD11 ;9 INC R0 CJNE @R0,#34H,CHK_CARD11 ;4 INC R0 CJNE @R0,#46H,CHK_CARD11 ;F MOV P2,#0F9H MOV P1,#0F5H ACALL DELAY MOV P2,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 11 *//; ;//******************//; CHK_CARD11: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD12 ;2 INC R0 CJNE @R0,#43H,CHK_CARD12 ;C INC R0 CJNE @R0,#30H,CHK_CARD12 ;0 INC R0 CJNE @R0,#30H,CHK_CARD12 ;0 INC R0 CJNE @R0,#34H,CHK_CARD12 ;4 INC R0 CJNE @R0,#37H,CHK_CARD12 ;7 INC R0 CJNE @R0,#42H,CHK_CARD12 ;B INC R0 CJNE @R0,#44H,CHK_CARD12 ;D INC R0 CJNE @R0,#34H,CHK_CARD12 ;4 INC R0 CJNE @R0,#42H,CHK_CARD12 ;B INC R0 CJNE @R0,#39H,CHK_CARD12 ;9 INC R0 CJNE @R0,#44H,CHK_CARD12 ;D MOV P0,#0F9H MOV P2,#0F9H MOV P1,#0F4H ACALL DELAY MOV P0,#0C0H MOV P2,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 12 *//; ;//******************//; CHK_CARD12: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD13 ;2 INC R0 CJNE @R0,#43H,CHK_CARD13 ;C INC R0 CJNE @R0,#30H,CHK_CARD13 ;0 INC R0 CJNE @R0,#30H,CHK_CARD13 ;0 INC R0 CJNE @R0,#34H,CHK_CARD13 ;4 INC R0 CJNE @R0,#37H,CHK_CARD13 ;7 INC R0 CJNE @R0,#42H,CHK_CARD13 ;B INC R0 CJNE @R0,#44H,CHK_CARD13 ;D INC R0 CJNE @R0,#36H,CHK_CARD13 ;6 INC R0 CJNE @R0,#35H,CHK_CARD13 ;5 INC R0 CJNE @R0,#42H,CHK_CARD13 ;B INC R0 CJNE @R0,#33H,CHK_CARD13 ;3 MOV P2,#0F9H MOV P0,#0A4H MOV P1,#0F3H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 13 *//; ;//******************//; CHK_CARD13: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD14 ;2 INC R0 CJNE @R0,#43H,CHK_CARD14 ;C INC R0 CJNE @R0,#30H,CHK_CARD14 ;0 INC R0 CJNE @R0,#30H,CHK_CARD14 ;0 INC R0 CJNE @R0,#34H,CHK_CARD14 ;4 INC R0 CJNE @R0,#37H,CHK_CARD14 ;7 INC R0 CJNE @R0,#42H,CHK_CARD14 ;B INC R0 CJNE @R0,#44H,CHK_CARD14 ;D INC R0 CJNE @R0,#35H,CHK_CARD14 ;5 INC R0 CJNE @R0,#38H,CHK_CARD14 ;8 INC R0 CJNE @R0,#38H,CHK_CARD14 ;8 INC R0 CJNE @R0,#45H,CHK_CARD14 ;E MOV P2,#0F9H MOV P0,#0B0H MOV P1,#0F2H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 14 *//; ;//******************//; CHK_CARD14: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD15 ;2 INC R0 CJNE @R0,#43H,CHK_CARD15 ;C INC R0 CJNE @R0,#30H,CHK_CARD15 ;0 INC R0 CJNE @R0,#30H,CHK_CARD15 ;0 INC R0 CJNE @R0,#34H,CHK_CARD15 ;4 INC R0 CJNE @R0,#37H,CHK_CARD15 ;7 INC R0 CJNE @R0,#42H,CHK_CARD15 ;B INC R0 CJNE @R0,#44H,CHK_CARD15 ;D INC R0 CJNE @R0,#38H,CHK_CARD15 ;8 INC R0 CJNE @R0,#43H,CHK_CARD15 ;C INC R0 CJNE @R0,#35H,CHK_CARD15 ;5 INC R0 CJNE @R0,#41H,CHK_CARD15 ;A MOV P2,#0F9H MOV P0,#99H MOV P1,#0F1H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 15 *//; ;//******************//; CHK_CARD15: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD16 ;2 INC R0 CJNE @R0,#43H,CHK_CARD16 ;C INC R0 CJNE @R0,#30H,CHK_CARD16 ;0 INC R0 CJNE @R0,#30H,CHK_CARD16 ;0 INC R0 CJNE @R0,#34H,CHK_CARD16 ;4 INC R0 CJNE @R0,#37H,CHK_CARD16 ;7 INC R0 CJNE @R0,#42H,CHK_CARD16 ;B INC R0 CJNE @R0,#44H,CHK_CARD16 ;D INC R0 CJNE @R0,#37H,CHK_CARD16 ;7 INC R0 CJNE @R0,#32H,CHK_CARD16 ;2 INC R0 CJNE @R0,#41H,CHK_CARD16 ;A INC R0 CJNE @R0,#34H,CHK_CARD16 ;4 MOV P2,#0F9H MOV P0,#92H MOV P1,#0F0H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 16 *//; ;//******************//; CHK_CARD16: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD17 ;2 INC R0 CJNE @R0,#43H,CHK_CARD17 ;C INC R0 CJNE @R0,#30H,CHK_CARD17 ;0 INC R0 CJNE @R0,#30H,CHK_CARD17 ;0 INC R0 CJNE @R0,#34H,CHK_CARD17 ;4 INC R0 CJNE @R0,#37H,CHK_CARD17 ;7 INC R0 CJNE @R0,#42H,CHK_CARD17 ;B INC R0 CJNE @R0,#44H,CHK_CARD17 ;D INC R0 CJNE @R0,#37H,CHK_CARD17 ;7 INC R0 CJNE @R0,#46H,CHK_CARD17 ;F INC R0 CJNE @R0,#41H,CHK_CARD17 ;A INC R0 CJNE @R0,#39H,CHK_CARD17 ;9 MOV P2,#0F9H MOV P0,#82H MOV P1,#0E0H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 17 *//; ;//******************//; CHK_CARD17: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD18 ;2 INC R0 CJNE @R0,#43H,CHK_CARD18 ;C INC R0 CJNE @R0,#30H,CHK_CARD18 ;0 INC R0 CJNE @R0,#30H,CHK_CARD18 ;0 INC R0 CJNE @R0,#34H,CHK_CARD18 ;4 INC R0 CJNE @R0,#37H,CHK_CARD18 ;7 INC R0 CJNE @R0,#42H,CHK_CARD18 ;B INC R0 CJNE @R0,#44H,CHK_CARD18 ;D INC R0 CJNE @R0,#41H,CHK_CARD18 ;A INC R0 CJNE @R0,#36H,CHK_CARD18 ;6 INC R0 CJNE @R0,#37H,CHK_CARD18 ;7 INC R0 CJNE @R0,#30H,CHK_CARD18 ;0 MOV P2,#0F9H MOV P0,#0F8H MOV P1,#0D0H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 18 *//; ;//******************//; CHK_CARD18: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD19 ;2 INC R0 CJNE @R0,#43H,CHK_CARD19 ;C INC R0 CJNE @R0,#30H,CHK_CARD19 ;0 INC R0 CJNE @R0,#30H,CHK_CARD19 ;0 INC R0 CJNE @R0,#34H,CHK_CARD19 ;4 INC R0 CJNE @R0,#37H,CHK_CARD19 ;7 INC R0 CJNE @R0,#42H,CHK_CARD19 ;B INC R0 CJNE @R0,#39H,CHK_CARD19 ;9 INC R0 CJNE @R0,#45H,CHK_CARD19 ;E INC R0 CJNE @R0,#35H,CHK_CARD19 ;5 INC R0 CJNE @R0,#33H,CHK_CARD19 ;3 INC R0 CJNE @R0,#37H,CHK_CARD19 ;7 MOV P2,#0F9H MOV P0,#80H MOV P1,#0C0H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 19 *//; ;//******************//; CHK_CARD19: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD20 ;2 INC R0 CJNE @R0,#43H,CHK_CARD20 ;C INC R0 CJNE @R0,#30H,CHK_CARD20 ;0 INC R0 CJNE @R0,#30H,CHK_CARD20 ;0 INC R0 CJNE @R0,#34H,CHK_CARD20 ;4 INC R0 CJNE @R0,#37H,CHK_CARD20 ;7 INC R0 CJNE @R0,#42H,CHK_CARD20 ;B INC R0 CJNE @R0,#39H,CHK_CARD20 ;9 INC R0 CJNE @R0,#43H,CHK_CARD20 ;C INC R0 CJNE @R0,#42H,CHK_CARD20 ;B INC R0 CJNE @R0,#31H,CHK_CARD20 ;1 INC R0 CJNE @R0,#39H,CHK_CARD20 ;9 MOV P2,#0F9H MOV P0,#90H MOV P1,#0B0H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 20 *//; ;//******************//; CHK_CARD20: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD21 ;2 INC R0 CJNE @R0,#43H,CHK_CARD21 ;C INC R0 CJNE @R0,#30H,CHK_CARD21 ;0 INC R0 CJNE @R0,#30H,CHK_CARD21 ;0 INC R0 CJNE @R0,#34H,CHK_CARD21 ;4 INC R0 CJNE @R0,#37H,CHK_CARD21 ;7 INC R0 CJNE @R0,#42H,CHK_CARD21 ;B INC R0 CJNE @R0,#39H,CHK_CARD21 ;9 INC R0 CJNE @R0,#46H,CHK_CARD21 ;F INC R0 CJNE @R0,#32H,CHK_CARD21 ;2 INC R0 CJNE @R0,#32H,CHK_CARD21 ;2 INC R0 CJNE @R0,#30H,CHK_CARD21 ;0 MOV P2,#0A4H MOV P1,#0A0H ACALL DELAY MOV P2,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 21 *//; ;//******************//; CHK_CARD21: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD22 ;2 INC R0 CJNE @R0,#43H,CHK_CARD22 ;C INC R0 CJNE @R0,#30H,CHK_CARD22 ;0 INC R0 CJNE @R0,#30H,CHK_CARD22 ;0 INC R0 CJNE @R0,#34H,CHK_CARD22 ;4 INC R0 CJNE @R0,#42H,CHK_CARD22 ;B INC R0 CJNE @R0,#44H,CHK_CARD22 ;D INC R0 CJNE @R0,#44H,CHK_CARD22 ;D INC R0 CJNE @R0,#42H,CHK_CARD22 ;B INC R0 CJNE @R0,#33H,CHK_CARD22 ;3 INC R0 CJNE @R0,#30H,CHK_CARD22 ;0 INC R0 CJNE @R0,#39H,CHK_CARD22 ;9 MOV P0,#0F9H MOV P2,#0A4H MOV P1,#90H ACALL DELAY MOV P2,#0C0H MOV P0,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 22 *//; ;//******************//; CHK_CARD22: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD23 ;2 INC R0 CJNE @R0,#43H,CHK_CARD23 ;C INC R0 CJNE @R0,#30H,CHK_CARD23 ;0 INC R0 CJNE @R0,#30H,CHK_CARD23 ;0 INC R0 CJNE @R0,#34H,CHK_CARD23 ;4 INC R0 CJNE @R0,#42H,CHK_CARD23 ;B INC R0 CJNE @R0,#44H,CHK_CARD23 ;D INC R0 CJNE @R0,#31H,CHK_CARD23 ;1 INC R0 CJNE @R0,#33H,CHK_CARD23 ;3 INC R0 CJNE @R0,#38H,CHK_CARD23 ;8 INC R0 CJNE @R0,#38H,CHK_CARD23 ;8 INC R0 CJNE @R0,#45H,CHK_CARD23 ;E MOV P0,#0A4H MOV P2,#0A4H MOV P1,#80H ACALL DELAY MOV P0,#0C0H MOV P2,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 23 *//; ;//******************//; CHK_CARD23: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD24 ;2 INC R0 CJNE @R0,#43H,CHK_CARD24 ;C INC R0 CJNE @R0,#30H,CHK_CARD24 ;0 INC R0 CJNE @R0,#30H,CHK_CARD24 ;0 INC R0 CJNE @R0,#34H,CHK_CARD24 ;4 INC R0 CJNE @R0,#42H,CHK_CARD24 ;B INC R0 CJNE @R0,#44H,CHK_CARD24 ;D INC R0 CJNE @R0,#31H,CHK_CARD24 ;1 INC R0 CJNE @R0,#34H,CHK_CARD24 ;4 INC R0 CJNE @R0,#33H,CHK_CARD24 ;3 INC R0 CJNE @R0,#46H,CHK_CARD24 ;F INC R0 CJNE @R0,#35H,CHK_CARD24 ;5 MOV P0,#0B0H MOV P2,#0A4H MOV P1,#70H ACALL DELAY MOV P0,#0C0H MOV P2,#0C0H MOV P1,#0FFH AJMP WAIT_DATA ;//******************//; ;//* CHECK CARD 24 *//; ;//******************//; CHK_CARD24: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,OUT_OF_DATA ;2 INC R0 CJNE @R0,#43H,OUT_OF_DATA ;C INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0 INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0 INC R0 CJNE @R0,#34H,OUT_OF_DATA ;4 INC R0 CJNE @R0,#42H,OUT_OF_DATA ;B INC R0 CJNE @R0,#44H,OUT_OF_DATA ;D INC R0 CJNE @R0,#31H,OUT_OF_DATA ;1 INC R0 CJNE @R0,#36H,OUT_OF_DATA ;6 INC R0 CJNE @R0,#43H,OUT_OF_DATA ;C INC R0 CJNE @R0,#44H,OUT_OF_DATA ;D INC R0 CJNE @R0,#41H,OUT_OF_DATA ;A MOV P0,#99H MOV P2,#0A4H MOV P1,#60H ACALL DELAY MOV P0,#0C0H MOV P2,#0C0H MOV P1,#0FFH AJMP WAIT_DATA
OUT_OF_DATA: ACALL CLR_BUFFER AJMP INITIAL
;//***** CLR RAM BUFFER *****//; CLR_BUFFER: MOV R0,#START_POINT_BUFFER CLR A CLR_BUFFER1: MOV @R0,A INC R0 CJNE R0,#START_POINT_BUFFER+14,CLR_BUFFER1 RET
;//***** DELAY ROUTINE *****//; DELAY: MOV R2,#150 DEL1: MOV R3,#80 DEL2: MOV R4,#80 DJNZ R4,$ DJNZ R3,DEL2 DJNZ R2,DEL1 RET DELAY2: MOV R4,#100 DEL4: MOV R7,#40 DEL3: MOV R6,#10 DJNZ R6,$ DJNZ R7,DEL3 DJNZ R4,DEL4 RET
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 26, 2011, 03:30:49 pm
รูปไม่ขึ้นhttp://image.free.in.th/show.php?id=8a77b83b62b9d889a18e6f5d16ffdfa4 (http://image.free.in.th/show.php?id=8a77b83b62b9d889a18e6f5d16ffdfa4)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 26, 2011, 03:35:11 pm
แนวคิดตามรูป http://image.free.in.th/show.php?id=8a77b83b62b9d889a18e6f5d16ffdfa4 (http://image.free.in.th/show.php?id=8a77b83b62b9d889a18e6f5d16ffdfa4)
แต่ไม่รู้จะเพิ่ม eeprom มายังไง ผมว่าจะเพิ่มที่ P2 เพราะได้ใช้แค่ 2 เส้น ยังเหลือ 6 เส้น ช่วยแนะแนวทางการติดต่อกับ eeprom ให้หน่อยครับ thank2 ขอบคุณมากๆครับ thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 26, 2011, 06:00:43 pm
I2C หรือ SPI ...... google ตัวอย่างเยอะแยะ.... :)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 27, 2011, 04:26:29 pm
เจอแต่ C ไม่มี asm เลย
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 28, 2011, 08:40:11 am
มีครับลองหาดูดีๆ.....
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 28, 2011, 01:01:18 pm
ช่วยดูแนวทางให้ผมหน่อยครับว่ามันเป็นไปได้ไหม แล้วถ้าไม่ได้ควรแก้ใขอย่างไร เริ่มตัน ตัวเครื่องยังไม่มีข้อมูลบัตร ต้องกดรหัส *1234 แล้วตามด้วยตำแหน่งผู้ใช้ เช่น ผู้ใช้คนที่ 1 ให้กด 01 แล้วนำการ์ดมาทาบ ตัวเครื่องจะทำการบันทึกข้อมูลบัตรคนที่ 1 จนถึง คนที่ 24 (สำหรับเจ้าของเครื่อง) การทำงาน เช่นคนที่ 1 ต้องการนำรถเข้ามาจอด ก็ทาบบัตร แล้วกดรหัส 4 ตัวอะไรก็ได้ตามใจผู้ใช้ แล้วเครื่องจะส่งเลขฐาน 16 ออกมาสั่งงาน PLC ที่ P1 เช่นคนที่ 1 ส่งข้อมูล 0000 0001 แล้วเวลานำรถออก ก็ทาบการ์ด ตามด้วยการกดรหัส 4 ตัวเดิมที่กดไว้ตอนนำรถเข้าจอด แล้วเครื่องจะส่งเลขฐาน 16 ออกมาสั่งงาน PLC เหมือนเดิม แล้วเครื่องจะทำการเคลียรหัส (เพื่อในกรณีเปลี่นเจ้าของบัตร ง่ายๆคือ กดครั้งแรกเป็นอะไรก็ได้แต่ตอนนำรถออกให้จำให้ได้) การทำงานก็ประมาณนี้ครับไม่รู้ว่าได้หรือไม่ :D :D :D
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 28, 2011, 01:55:13 pm
ไม่รู้ว่าต่อแบบนี้ได้ป่าวครับ แล้วจะเก็บข้อมูลพอหรือไม่ครับ แล้วการเขียนตามเงื่อนใขจะได้ป่าวครับ (http://www.sixca.com/micro/mcs51/i2c_eeprom/connecting.gif)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 28, 2011, 02:16:27 pm
(http://upic.me/i/gs/graphic1.jpg)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 28, 2011, 02:32:11 pm
ท่านใดรับสอน asm ตามเงื่อนใขด้านบน ช่วยติดต่อ PM thank2 thank2 thank2 thank2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 28, 2011, 10:35:42 pm
ลองเขียน flowchart ลำดับการทำงานดูก่อน เรื่อง program ไม่ยาก.......
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 12:06:32 am
เมื่อทำการบันทึกข้อมูลการ์ดโดยกด *1234 แล้ว ในกรณีที่เครื่องทำงานอยู่สามารถกด *1234 เพื่อบันทึกการ์ดใบอื่นๆในกรณี เปลี่ยนการ์ดหรือการ์ดใบเดิมหาย
ขั้นตอนการบันทึกข้อมูลหรือเปลี่ยนการ์ดจะทำโดยเจ้าของเครื่องไม่ใช่ผู้ใช้ (http://upic.me/i/7k/drawing2.jpg)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 29, 2011, 07:49:26 am
เขียน program initerface อุปกรณ์แต่ละตัวแล้วแยกไว้... เช่น ส่วนการแสดงผล lcd ส่วนรับค่า key และ card ที่เหลือก็มี i2c กับ plc
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 11:53:47 am
ส่วน LCD START_POINT_BUFFER: EQU 040H ; กำหนดหน่วยความจำสำหรับค่า Data RFID LCD_ADDR: EQU 030H ; กำหนดหน่วยความสำหรับค่า Address LCD LCD_DATA: EQU 031H ; กำหนดหน่วยความสำหรับค่า Data LCD
MOV P1,#0FFH MOV P0,#00H ; กำหนดค่าเริ่มต้นให้กับพอร์ต 0 MOV P2,#00011111B
MAIN: LCALL INIT_LCD ; เรียกโปรแกรมย่อยเพื่อเตรียมการทำงานเริ่มต้น LCD ACALL LCD_CLR ; ล้างจอแสดงผล MOV LCD_ADDR,#00H ; กำหนดค่า Address เริ่มต้นเป็น 00 LCALL SET_ADDR_LCD MOV DPTR,#TITLE_01 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 00H-0FH MOV LCD_ADDR,#40H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_02 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH
WAIT_DATA: MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_02 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH ;-------ส่วนแสดงผล USER : 01-24 LCD_01: MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_1 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH
;--------------------------------------------------------------------------------- ; LCD Initialize โปรแกรมย่อยเพื่อเตรียมการทำงานเริ่มต้น LCD ;--------------------------------------------------------------------------------- INIT_LCD: LCALL DELAY_100ms ; หน่วงเวลา เพื่อให้จอแอลซีดีพร้อมก่อน CLR P2.7 ; ขา RS เป็น 0 เพื่อแจ้งให้ทราบว่าเป็นการส่งคำสั่ง MOV P0,#00111000B ; กำหนดโหมดเป็นแบบ 8bit LCALL LCD_CLK ; ส่งพัลซ์ 1 ลูก ที่ขา Enable LCALL DELAY_10ms ; หน่วงเวลาเพื่อให้จอฯพร้อมรับคำสั่งถัดไป LCALL LCD_OFF ; เรียกโปรแกรมย่อย ปิดจอแสดงผล LCALL LCD_CLR ; เรียกโปรแกรมย่อย ล้างค่าจอแสดงผล MOV P0,#00000110B ; กำหนดโหมดการป้อนข้อมูล LCALL LCD_CLK ; ส่งพัลซ์ 1 ลูก ที่ขา Enable LCALL LCD_HOME ; เรียกโปรแกรมย่อยเพื่อย้ายเคอร์เซอร์ไปยังตำแหน่งแรก ;----------------------------------------------------------------- ; LCD Clear Display โปรแกรมย่อยล้างค่าจอแสดงผล ;----------------------------------------------------------------- LCD_CLR: CLR P2.7 MOV P0,#00000001B ACALL LCD_CLK RET ;---------------------------------------------------------------------------------------- ; LCD Return Home โปรแกรมย่อยเพื่อย้ายเคอร์เซอร์ไปยังตำแหน่งแรก ;---------------------------------------------------------------------------------------- LCD_HOME: CLR P2.7 MOV P0,#00000010B ACALL LCD_CLK RET ;---------------------------------------------------------- ; LCD Display Off โปรแกรมย่อย ปิดจอแสดงผล ;----------------------------------------------------------- LCD_OFF: CLR P2.7 MOV P0,#00001000B ACALL LCD_CLK RET ;-------------------------------------------------------------------- ; LCD Clk โปรแกรมย่อยเพื่อ ส่งพัลซ์ 1 ลูก ที่ขา Enable ;-------------------------------------------------------------------- LCD_CLK: SETB P2.6 LCALL LCD_DELAY CLR P2.6 LCALL LCD_DELAY RET ;-------------------------------------------------------------- ; LCD Display On โปรแกรมย่อย เปิดจอแสดงผล ;-------------------------------------------------------------- LCD_ON: CLR P2.7 MOV P0,#00001100B LCALL LCD_CLK RET ;-------------------------------------------------------- ; LCD Cursor On โปรแกรมย่อย เปิดเคอร์เซอร์ ;-------------------------------------------------------- LCD_BLINK: CLR P2.7 MOV P0,#00001111B LCALL LCD_CLK RET ;------------------------------------------------------------------------------------------- ; LCD Left Shift Display โปรแกรมย่อย เลือกการแสดงผลไปทางซ้าย 1 ครั้ง ;-------------------------------------------------------------------------------------------- LCD_LSHF: CLR P2.7 MOV P0,#00011000B LCALL LCD_CLK RET ;--------------------------------------------------------------------------------------------- ; LCD Right Shift Display โปรแกรมย่อย เลือกการแสดงผลไปทางขวา 1 ครั้ง ;--------------------------------------------------------------------------------------------- LCD_RSHF: CLR P2.7 MOV P0,#00011100B LCALL LCD_CLK RET ;---------------------------------------------------------------------------------- ; Set LCD Address โปรแกรมย่อยเพื่อกำหนดตำแหน่งในจอแอลซีดี ;--------------------------------------------------------------------------------- SET_ADDR_LCD: CLR P2.7 MOV A,LCD_ADDR SETB ACC.7 MOV P0,A LCALL LCD_CLK RET ;------------------------------------------------------------------------------------------- ; Write Character to show LCD โปรแกรมย่อยเพื่อแสดงตัวอักษรที่ต้องการ ;------------------------------------------------------------------------------------------- WRCHAR_LCD: SETB P2.7 MOV P0,LCD_DATA LCALL LCD_CLK LCALL LCD_ON RET ;------------------------------------------------------------------------------------------------------------------- ; Write Line of 16 Character from ROM โปรแกรมย่อยเพื่อส่งตัวอักษรจาก ROM ไปจอแอลซีดี ;------------------------------------------------------------------------------------------------------------------- WRLINE_LCD: MOV R0,#0 WRLINE_LCD_1: SETB P2.7 CLR A MOVC A,@A+DPTR MOV P0,A LCALL LCD_CLK INC DPTR INC R0 CJNE R0,#16,WRLINE_LCD_1 LCALL LCD_ON RET ;--------------------------------------------------------------------------------------- ; DELAY ROUTINE โปรแกรมย่อยสำหรับหน่วงเวลา ;--------------------------------------------------------------------------------------- LCD_DELAY: MOV R7,#002 LCD_DELAY_1: MOV R6,#0E6H LCD_DELAY_2: NOP NOP DJNZ R6,LCD_DELAY_2 DJNZ R7,LCD_DELAY_1 RET DELAY_10ms: MOV R7,#010 DELAY_10ms_1: MOV R6,#0E6H DELAY_10ms_2: NOP NOP DJNZ R6,DELAY_10ms_2 DJNZ R7,DELAY_10ms_1 RET DELAY_100ms: MOV R7,#100 DELAY_100ms_1: MOV R6,#0E6H DELAY_100ms_2: NOP NOP DJNZ R6,DELAY_100ms_2 DJNZ R7,DELAY_100ms_1 RET DELAY_1s: MOV R5,#100 DELAY_1s_1: LCALL DELAY_10ms DJNZ R5,DELAY_1s_1 RET DELAY: MOV R2,#250 DEL1: MOV R3,#80 DEL2: MOV R4,#80 DJNZ R4,$ DJNZ R3,DEL2 DJNZ R2,DEL1 RET ;------------------------------------------------------------------------------------- ; กำหนดค่าข้อมูลของตัวอักษรที่ต้องการ เก็บไว้ที่หน่วยความจำ ROM ; Define Constant ( Store in Flash EEPROM Program Memory ) ;------------------------------------------------------------------------------------- TITLE_01: DFB "AUTO CAR PARKING " TITLE_02: DFB " Proximity card " TITLE_03: DFB " Unknown card " TITLE_04: DFB "AUTOMATIC CAR " TITLE_05: DFB "PARKING " TITLE_1: DFB " User ID : 1 " TITLE_2: DFB " User ID : 2 " TITLE_3: DFB " User ID : 3 " TITLE_4: DFB " User ID : 4 " TITLE_5: DFB " User ID : 5 " TITLE_6: DFB " User ID : 6 " TITLE_7: DFB " User ID : 7 " TITLE_8: DFB " User ID : 8 " TITLE_9: DFB " User ID : 9 " TITLE_10: DFB " User ID : 10 " TITLE_11: DFB " User ID : 11 " TITLE_12: DFB " User ID : 12 " TITLE_13: DFB " User ID : 13 " TITLE_14: DFB " User ID : 14 " TITLE_15: DFB " User ID : 15 " TITLE_16: DFB " User ID : 16 " TITLE_17: DFB " User ID : 17 " TITLE_18: DFB " User ID : 18 " TITLE_19: DFB " User ID : 19 " TITLE_20: DFB " User ID : 20 " TITLE_21: DFB " User ID : 21 " TITLE_22: DFB " User ID : 22 " TITLE_23: DFB " User ID : 23 " TITLE_24: DFB " User ID : 24 "
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 12:00:40 pm
ส่วนรับค่าจากการ์ด แต่การรับคีย์ไม่เข้าใจว่าจะเอาคีย์ที่กดทีละตัวไปเก็บไว้ไหนแล้วรวมกันเป็นข้อมูล 1 ชุด เก็บไว้ใน eeprom INITIAL: MOV SP,#060H MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH SETB TR1
MOV R0,#START_POINT_BUFFER WAIT_DATA1: CLR RI JNB RI,$ MOV @R0,SBUF INC R0 CJNE R0,#START_POINT_BUFFER+14,WAIT_DATA1
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 12:09:07 pm
ส่วน PLC จะส่งข้อมูลเปิด1 ครั้งแล้ว ปิด ไม่ว่าจะนำรถเข้าหรือออก ก็ส่งข้อมูลเหมือนเดิม ID_01: MOV P1,#0FEH LCALL DELAY MOV P1,#0FFH ID_02: MOV P1,#0FDH LCALL DELAY MOV P1,#0FFH
ID_03: MOV P1,#0FCH LCALL DELAY MOV P1,#0FFH ID_04: MOV P1,#0FBH LCALL DELAY MOV P1,#0FFH จนถึง 24
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 29, 2011, 12:18:31 pm
กำหนด memmory map ด้วยครับ เพราะตอนเราเขียน main program จะต้องอ้างตำแหน่ง ของ memory และ commend ใน program ย่อยด้วยว่า มีการใช้ register ตัวใดบ้าง buffer ตำแหน่งใด ค่าที่ส่งผ่านและค่าที่รับได้อยู่ตำแหน่งไหน...... เอาให้ละเอียด เพราะมันจะเป็นเหมือน library ที่เราต้องเรียกใช้ใน main programs ....
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 12:23:32 pm
>:( ไม่ค่อยเข้าใจครับ
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 12:25:44 pm
อันนี้โปรแกรมเต็มครับ แต่ตอนนั้นยังไม่มีการกดคีย์และการเปลี่ยนการ์ด ;############################## ;# AUTOMATIC CAR PARKING # ;############################## CPU "8051.TBL" HOF "INT8" ORG 0 START_POINT_BUFFER: EQU 040H ; กำหนดหน่วยความจำสำหรับค่า Data RFID LCD_ADDR: EQU 030H ; กำหนดหน่วยความสำหรับค่า Address LCD LCD_DATA: EQU 031H ; กำหนดหน่วยความสำหรับค่า Data LCD
INITIAL: MOV SP,#060H MOV TMOD,#20H MOV SCON,#50H MOV TH1,#0FBH SETB TR1 MOV P1,#0FFH MOV P0,#00H ; กำหนดค่าเริ่มต้นให้กับพอร์ต 0 MOV P2,#00011111B MAIN: LCALL INIT_LCD ; เรียกโปรแกรมย่อยเพื่อเตรียมการทำงานเริ่มต้น LCD ACALL LCD_CLR ; ล้างจอแสดงผล LOOP: MOV LCD_ADDR,#10H ; กำหนดค่า Address เริ่มต้นเป็น 00 LCALL SET_ADDR_LCD MOV DPTR,#TITLE_04 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 10H-1FH MOV DPTR,#TITLE_05 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 20H-2FH MOV R4,#40 ; เลื่อนชุดแสดงผลไปทาง้ซ้าย 40 ครั้ง LOOP_LCD_L_SHF: LCALL LCD_LSHF LCALL DELAY_100ms LCALL DELAY_100ms LCALL DELAY_100ms DJNZ R4,LOOP_LCD_L_SHF LCALL INIT_LCD MOV LCD_ADDR,#00H ; กำหนดค่า Address เริ่มต้นเป็น 00 LCALL SET_ADDR_LCD MOV DPTR,#TITLE_01 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 00H-0FH MOV LCD_ADDR,#40H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_02 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH ;------------------------------; ; WAIT RFID DATA ; ;------------------------------; WAIT_DATA: MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_02 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH
MOV R0,#START_POINT_BUFFER WAIT_DATA1: CLR RI JNB RI,$ MOV @R0,SBUF INC R0 CJNE R0,#START_POINT_BUFFER+14,WAIT_DATA1 ;------------------------------------; ; CHECK CARD 1 ; ;------------------------------------; CHK_CARD1: MOV R0,#START_POINT_BUFFER CJNE @R0,#02H,START_TX_ERROR ;STX=02H MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD2 ;2 INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#30H,CHK_CARD2 ;0 INC R0 CJNE @R0,#39H,CHK_CARD2 ;9 INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#46H,CHK_CARD2 ;F INC R0 CJNE @R0,#39H,CHK_CARD2 ;9 INC R0 CJNE @R0,#41H,CHK_CARD2 ;A INC R0 CJNE @R0,#46H,CHK_CARD2 ;F INC R0 CJNE @R0,#45H,CHK_CARD2 ;E INC R0 CJNE @R0,#36H,CHK_CARD2 ;6 MOV P1,#0FEH MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_1 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA START_TX_ERROR: LCALL CLR_BUFFER AJMP WAIT_DATA ;------------------------------------; ; CHECK CARD 2 ; ;------------------------------------; CHK_CARD2: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD3 ;2 INC R0 CJNE @R0,#41H,CHK_CARD3 ;A INC R0 CJNE @R0,#30H,CHK_CARD3 ;0 INC R0 CJNE @R0,#30H,CHK_CARD3 ;0 INC R0 CJNE @R0,#39H,CHK_CARD3 ;9 INC R0 CJNE @R0,#41H,CHK_CARD3 ;A INC R0 CJNE @R0,#46H,CHK_CARD3 ;F INC R0 CJNE @R0,#41H,CHK_CARD3 ;A INC R0 CJNE @R0,#39H,CHK_CARD3 ;9 INC R0 CJNE @R0,#33H,CHK_CARD3 ;3 INC R0 CJNE @R0,#44H,CHK_CARD3 ;D INC R0 CJNE @R0,#39H,CHK_CARD3 ;9 MOV P1,#0FDH MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_2 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 3 ; ;---------------------------------; CHK_CARD3: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD4 ;2 INC R0 CJNE @R0,#41H,CHK_CARD4 ;A INC R0 CJNE @R0,#30H,CHK_CARD4 ;0 INC R0 CJNE @R0,#30H,CHK_CARD4 ;0 INC R0 CJNE @R0,#39H,CHK_CARD4 ;9 INC R0 CJNE @R0,#44H,CHK_CARD4 ;D INC R0 CJNE @R0,#46H,CHK_CARD4 ;F INC R0 CJNE @R0,#44H,CHK_CARD4 ;D INC R0 CJNE @R0,#42H,CHK_CARD4 ;B INC R0 CJNE @R0,#33H,CHK_CARD4 ;3 INC R0 CJNE @R0,#46H,CHK_CARD4 ;F INC R0 CJNE @R0,#39H,CHK_CARD4 ;9 MOV P1,#0FCH MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_3 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 4 ; ;---------------------------------; CHK_CARD4: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD5 ;2 INC R0 CJNE @R0,#41H,CHK_CARD5 ;A INC R0 CJNE @R0,#30H,CHK_CARD5 ;0 INC R0 CJNE @R0,#30H,CHK_CARD5 ;0 INC R0 CJNE @R0,#39H,CHK_CARD5 ;9 INC R0 CJNE @R0,#44H,CHK_CARD5 ;D INC R0 CJNE @R0,#45H,CHK_CARD5 ;E INC R0 CJNE @R0,#39H,CHK_CARD5 ;9 INC R0 CJNE @R0,#32H,CHK_CARD5 ;2 INC R0 CJNE @R0,#42H,CHK_CARD5 ;B INC R0 CJNE @R0,#37H,CHK_CARD5 ;7 INC R0 CJNE @R0,#35H,CHK_CARD5 ;5 MOV P1,#0FBH MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_4 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 5 ; ;---------------------------------; CHK_CARD5: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD6 ;2 INC R0 CJNE @R0,#41H,CHK_CARD6 ;A INC R0 CJNE @R0,#30H,CHK_CARD6 ;0 INC R0 CJNE @R0,#30H,CHK_CARD6 ;0 INC R0 CJNE @R0,#39H,CHK_CARD6 ;9 INC R0 CJNE @R0,#44H,CHK_CARD6 ;D INC R0 CJNE @R0,#46H,CHK_CARD6 ;F INC R0 CJNE @R0,#44H,CHK_CARD6 ;D INC R0 CJNE @R0,#43H,CHK_CARD6 ;C INC R0 CJNE @R0,#44H,CHK_CARD6 ;D INC R0 CJNE @R0,#38H,CHK_CARD6 ;8 INC R0 CJNE @R0,#37H,CHK_CARD6 ;7 MOV P1,#0FAH MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_5 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 6 ; ;---------------------------------; CHK_CARD6: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD7 ;2 INC R0 CJNE @R0,#41H,CHK_CARD7 ;A INC R0 CJNE @R0,#30H,CHK_CARD7 ;0 INC R0 CJNE @R0,#30H,CHK_CARD7 ;0 INC R0 CJNE @R0,#39H,CHK_CARD7 ;9 INC R0 CJNE @R0,#44H,CHK_CARD7 ;D INC R0 CJNE @R0,#45H,CHK_CARD7 ;E INC R0 CJNE @R0,#39H,CHK_CARD7 ;9 INC R0 CJNE @R0,#46H,CHK_CARD7 ;F INC R0 CJNE @R0,#34H,CHK_CARD7 ;4 INC R0 CJNE @R0,#41H,CHK_CARD7 ;A INC R0 CJNE @R0,#41H,CHK_CARD7 ;A MOV P1,#0F9H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_6 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 7 ; ;---------------------------------; CHK_CARD7: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD8 ;2 INC R0 CJNE @R0,#41H,CHK_CARD8 ;A INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#39H,CHK_CARD8 ;9 INC R0 CJNE @R0,#42H,CHK_CARD8 ;B INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#42H,CHK_CARD8 ;B INC R0 CJNE @R0,#42H,CHK_CARD8 ;B INC R0 CJNE @R0,#34H,CHK_CARD8 ;4 INC R0 CJNE @R0,#30H,CHK_CARD8 ;0 INC R0 CJNE @R0,#45H,CHK_CARD8 ;E MOV P1,#0F8H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_7 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 8 ; ;---------------------------------; CHK_CARD8: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD9 ;2 INC R0 CJNE @R0,#41H,CHK_CARD9 ;A INC R0 CJNE @R0,#30H,CHK_CARD9 ;0 INC R0 CJNE @R0,#30H,CHK_CARD9 ;0 INC R0 CJNE @R0,#39H,CHK_CARD9 ;9 INC R0 CJNE @R0,#42H,CHK_CARD9 ;B INC R0 CJNE @R0,#35H,CHK_CARD9 ;5 INC R0 CJNE @R0,#43H,CHK_CARD9 ;C INC R0 CJNE @R0,#42H,CHK_CARD9 ;B INC R0 CJNE @R0,#34H,CHK_CARD9 ;4 INC R0 CJNE @R0,#35H,CHK_CARD9 ;5 INC R0 CJNE @R0,#39H,CHK_CARD9 ;9 MOV P1,#0F7H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_8 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 9 ; ;---------------------------------; CHK_CARD9: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD10 ;2 INC R0 CJNE @R0,#41H,CHK_CARD10 ;A INC R0 CJNE @R0,#30H,CHK_CARD10 ;0 INC R0 CJNE @R0,#30H,CHK_CARD10 ;0 INC R0 CJNE @R0,#39H,CHK_CARD10 ;9 INC R0 CJNE @R0,#42H,CHK_CARD10 ;B INC R0 CJNE @R0,#32H,CHK_CARD10 ;2 INC R0 CJNE @R0,#44H,CHK_CARD10 ;D INC R0 CJNE @R0,#46H,CHK_CARD10 ;F INC R0 CJNE @R0,#44H,CHK_CARD10 ;D INC R0 CJNE @R0,#36H,CHK_CARD10 ;6 INC R0 CJNE @R0,#31H,CHK_CARD10 ;1 MOV P1,#0F6H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_9 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 10 ; ;---------------------------------; CHK_CARD10: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD11 ;2 INC R0 CJNE @R0,#43H,CHK_CARD11 ;C INC R0 CJNE @R0,#30H,CHK_CARD11 ;0 INC R0 CJNE @R0,#30H,CHK_CARD11 ;0 INC R0 CJNE @R0,#34H,CHK_CARD11 ;4 INC R0 CJNE @R0,#37H,CHK_CARD11 ;7 INC R0 CJNE @R0,#42H,CHK_CARD11 ;B INC R0 CJNE @R0,#44H,CHK_CARD11 ;D INC R0 CJNE @R0,#39H,CHK_CARD11 ;9 INC R0 CJNE @R0,#39H,CHK_CARD11 ;9 INC R0 CJNE @R0,#34H,CHK_CARD11 ;4 INC R0 CJNE @R0,#46H,CHK_CARD11 ;F MOV P1,#0F5H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_10 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 11 ; ;---------------------------------; CHK_CARD11: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD12 ;2 INC R0 CJNE @R0,#43H,CHK_CARD12 ;C INC R0 CJNE @R0,#30H,CHK_CARD12 ;0 INC R0 CJNE @R0,#30H,CHK_CARD12 ;0 INC R0 CJNE @R0,#34H,CHK_CARD12 ;4 INC R0 CJNE @R0,#37H,CHK_CARD12 ;7 INC R0 CJNE @R0,#42H,CHK_CARD12 ;B INC R0 CJNE @R0,#44H,CHK_CARD12 ;D INC R0 CJNE @R0,#34H,CHK_CARD12 ;4 INC R0 CJNE @R0,#42H,CHK_CARD12 ;B INC R0 CJNE @R0,#39H,CHK_CARD12 ;9 INC R0 CJNE @R0,#44H,CHK_CARD12 ;D MOV P1,#0F4H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_11 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 12 ; ;---------------------------------; CHK_CARD12: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD13 ;2 INC R0 CJNE @R0,#43H,CHK_CARD13 ;C INC R0 CJNE @R0,#30H,CHK_CARD13 ;0 INC R0 CJNE @R0,#30H,CHK_CARD13 ;0 INC R0 CJNE @R0,#34H,CHK_CARD13 ;4 INC R0 CJNE @R0,#37H,CHK_CARD13 ;7 INC R0 CJNE @R0,#42H,CHK_CARD13 ;B INC R0 CJNE @R0,#44H,CHK_CARD13 ;D INC R0 CJNE @R0,#36H,CHK_CARD13 ;6 INC R0 CJNE @R0,#35H,CHK_CARD13 ;5 INC R0 CJNE @R0,#42H,CHK_CARD13 ;B INC R0 CJNE @R0,#33H,CHK_CARD13 ;3 MOV P1,#0F3H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_12 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 13 ; ;---------------------------------; CHK_CARD13: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD14 ;2 INC R0 CJNE @R0,#43H,CHK_CARD14 ;C INC R0 CJNE @R0,#30H,CHK_CARD14 ;0 INC R0 CJNE @R0,#30H,CHK_CARD14 ;0 INC R0 CJNE @R0,#34H,CHK_CARD14 ;4 INC R0 CJNE @R0,#37H,CHK_CARD14 ;7 INC R0 CJNE @R0,#42H,CHK_CARD14 ;B INC R0 CJNE @R0,#44H,CHK_CARD14 ;D INC R0 CJNE @R0,#35H,CHK_CARD14 ;5 INC R0 CJNE @R0,#38H,CHK_CARD14 ;8 INC R0 CJNE @R0,#38H,CHK_CARD14 ;8 INC R0 CJNE @R0,#45H,CHK_CARD14 ;E MOV P1,#0F2H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_13 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 14 ; ;---------------------------------; CHK_CARD14: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD15 ;2 INC R0 CJNE @R0,#43H,CHK_CARD15 ;C INC R0 CJNE @R0,#30H,CHK_CARD15 ;0 INC R0 CJNE @R0,#30H,CHK_CARD15 ;0 INC R0 CJNE @R0,#34H,CHK_CARD15 ;4 INC R0 CJNE @R0,#37H,CHK_CARD15 ;7 INC R0 CJNE @R0,#42H,CHK_CARD15 ;B INC R0 CJNE @R0,#44H,CHK_CARD15 ;D INC R0 CJNE @R0,#38H,CHK_CARD15 ;8 INC R0 CJNE @R0,#43H,CHK_CARD15 ;C INC R0 CJNE @R0,#35H,CHK_CARD15 ;5 INC R0 CJNE @R0,#41H,CHK_CARD15 ;A MOV P1,#0F1H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_14 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 15 ; ;---------------------------------; CHK_CARD15: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD16 ;2 INC R0 CJNE @R0,#43H,CHK_CARD16 ;C INC R0 CJNE @R0,#30H,CHK_CARD16 ;0 INC R0 CJNE @R0,#30H,CHK_CARD16 ;0 INC R0 CJNE @R0,#34H,CHK_CARD16 ;4 INC R0 CJNE @R0,#37H,CHK_CARD16 ;7 INC R0 CJNE @R0,#42H,CHK_CARD16 ;B INC R0 CJNE @R0,#44H,CHK_CARD16 ;D INC R0 CJNE @R0,#37H,CHK_CARD16 ;7 INC R0 CJNE @R0,#32H,CHK_CARD16 ;2 INC R0 CJNE @R0,#41H,CHK_CARD16 ;A INC R0 CJNE @R0,#34H,CHK_CARD16 ;4 MOV P1,#0F0H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_15 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 16 ; ;---------------------------------; CHK_CARD16: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD17 ;2 INC R0 CJNE @R0,#43H,CHK_CARD17 ;C INC R0 CJNE @R0,#30H,CHK_CARD17 ;0 INC R0 CJNE @R0,#30H,CHK_CARD17 ;0 INC R0 CJNE @R0,#34H,CHK_CARD17 ;4 INC R0 CJNE @R0,#37H,CHK_CARD17 ;7 INC R0 CJNE @R0,#42H,CHK_CARD17 ;B INC R0 CJNE @R0,#44H,CHK_CARD17 ;D INC R0 CJNE @R0,#37H,CHK_CARD17 ;7 INC R0 CJNE @R0,#46H,CHK_CARD17 ;F INC R0 CJNE @R0,#41H,CHK_CARD17 ;A INC R0 CJNE @R0,#39H,CHK_CARD17 ;9 MOV P1,#0E0H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_16 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 17 ; ;---------------------------------; CHK_CARD17: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD18 ;2 INC R0 CJNE @R0,#43H,CHK_CARD18 ;C INC R0 CJNE @R0,#30H,CHK_CARD18 ;0 INC R0 CJNE @R0,#30H,CHK_CARD18 ;0 INC R0 CJNE @R0,#34H,CHK_CARD18 ;4 INC R0 CJNE @R0,#37H,CHK_CARD18 ;7 INC R0 CJNE @R0,#42H,CHK_CARD18 ;B INC R0 CJNE @R0,#44H,CHK_CARD18 ;D INC R0 CJNE @R0,#41H,CHK_CARD18 ;A INC R0 CJNE @R0,#36H,CHK_CARD18 ;6 INC R0 CJNE @R0,#37H,CHK_CARD18 ;7 INC R0 CJNE @R0,#30H,CHK_CARD18 ;0 MOV P1,#0D0H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_17 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 18 ; ;---------------------------------; CHK_CARD18: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD19 ;2 INC R0 CJNE @R0,#43H,CHK_CARD19 ;C INC R0 CJNE @R0,#30H,CHK_CARD19 ;0 INC R0 CJNE @R0,#30H,CHK_CARD19 ;0 INC R0 CJNE @R0,#34H,CHK_CARD19 ;4 INC R0 CJNE @R0,#37H,CHK_CARD19 ;7 INC R0 CJNE @R0,#42H,CHK_CARD19 ;B INC R0 CJNE @R0,#39H,CHK_CARD19 ;9 INC R0 CJNE @R0,#45H,CHK_CARD19 ;E INC R0 CJNE @R0,#35H,CHK_CARD19 ;5 INC R0 CJNE @R0,#33H,CHK_CARD19 ;3 INC R0 CJNE @R0,#37H,CHK_CARD19 ;7 MOV P1,#0C0H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_18 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 19 ; ;---------------------------------; CHK_CARD19: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD20 ;2 INC R0 CJNE @R0,#43H,CHK_CARD20 ;C INC R0 CJNE @R0,#30H,CHK_CARD20 ;0 INC R0 CJNE @R0,#30H,CHK_CARD20 ;0 INC R0 CJNE @R0,#34H,CHK_CARD20 ;4 INC R0 CJNE @R0,#37H,CHK_CARD20 ;7 INC R0 CJNE @R0,#42H,CHK_CARD20 ;B INC R0 CJNE @R0,#39H,CHK_CARD20 ;9 INC R0 CJNE @R0,#43H,CHK_CARD20 ;C INC R0 CJNE @R0,#42H,CHK_CARD20 ;B INC R0 CJNE @R0,#31H,CHK_CARD20 ;1 INC R0 CJNE @R0,#39H,CHK_CARD20 ;9 MOV P1,#0B0H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_19 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 20 ; ;---------------------------------; CHK_CARD20: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD21 ;2 INC R0 CJNE @R0,#43H,CHK_CARD21 ;C INC R0 CJNE @R0,#30H,CHK_CARD21 ;0 INC R0 CJNE @R0,#30H,CHK_CARD21 ;0 INC R0 CJNE @R0,#34H,CHK_CARD21 ;4 INC R0 CJNE @R0,#37H,CHK_CARD21 ;7 INC R0 CJNE @R0,#42H,CHK_CARD21 ;B INC R0 CJNE @R0,#39H,CHK_CARD21 ;9 INC R0 CJNE @R0,#46H,CHK_CARD21 ;F INC R0 CJNE @R0,#32H,CHK_CARD21 ;2 INC R0 CJNE @R0,#32H,CHK_CARD21 ;2 INC R0 CJNE @R0,#30H,CHK_CARD21 ;0 MOV P1,#0A0H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_20 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 21 ; ;---------------------------------; CHK_CARD21: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD22 ;2 INC R0 CJNE @R0,#43H,CHK_CARD22 ;C INC R0 CJNE @R0,#30H,CHK_CARD22 ;0 INC R0 CJNE @R0,#30H,CHK_CARD22 ;0 INC R0 CJNE @R0,#34H,CHK_CARD22 ;4 INC R0 CJNE @R0,#42H,CHK_CARD22 ;B INC R0 CJNE @R0,#44H,CHK_CARD22 ;D INC R0 CJNE @R0,#44H,CHK_CARD22 ;D INC R0 CJNE @R0,#42H,CHK_CARD22 ;B INC R0 CJNE @R0,#33H,CHK_CARD22 ;3 INC R0 CJNE @R0,#30H,CHK_CARD22 ;0 INC R0 CJNE @R0,#39H,CHK_CARD22 ;9 MOV P1,#90H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_21 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 22 ; ;---------------------------------; CHK_CARD22: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD23 ;2 INC R0 CJNE @R0,#43H,CHK_CARD23 ;C INC R0 CJNE @R0,#30H,CHK_CARD23 ;0 INC R0 CJNE @R0,#30H,CHK_CARD23 ;0 INC R0 CJNE @R0,#34H,CHK_CARD23 ;4 INC R0 CJNE @R0,#42H,CHK_CARD23 ;B INC R0 CJNE @R0,#44H,CHK_CARD23 ;D INC R0 CJNE @R0,#31H,CHK_CARD23 ;1 INC R0 CJNE @R0,#33H,CHK_CARD23 ;3 INC R0 CJNE @R0,#38H,CHK_CARD23 ;8 INC R0 CJNE @R0,#38H,CHK_CARD23 ;8 INC R0 CJNE @R0,#45H,CHK_CARD23 ;E MOV P1,#80H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_22 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 23 ; ;---------------------------------; CHK_CARD23: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,CHK_CARD24 ;2 INC R0 CJNE @R0,#43H,CHK_CARD24 ;C INC R0 CJNE @R0,#30H,CHK_CARD24 ;0 INC R0 CJNE @R0,#30H,CHK_CARD24 ;0 INC R0 CJNE @R0,#34H,CHK_CARD24 ;4 INC R0 CJNE @R0,#42H,CHK_CARD24 ;B INC R0 CJNE @R0,#44H,CHK_CARD24 ;D INC R0 CJNE @R0,#31H,CHK_CARD24 ;1 INC R0 CJNE @R0,#34H,CHK_CARD24 ;4 INC R0 CJNE @R0,#33H,CHK_CARD24 ;3 INC R0 CJNE @R0,#46H,CHK_CARD24 ;F INC R0 CJNE @R0,#35H,CHK_CARD24 ;5 MOV P1,#70H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_23 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; CHECK CARD 24 ; ;---------------------------------; CHK_CARD24: MOV R0,#START_POINT_BUFFER INC R0 CJNE @R0,#32H,OUT_OF_DATA ;2 INC R0 CJNE @R0,#43H,OUT_OF_DATA ;C INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0 INC R0 CJNE @R0,#30H,OUT_OF_DATA ;0 INC R0 CJNE @R0,#34H,OUT_OF_DATA ;4 INC R0 CJNE @R0,#42H,OUT_OF_DATA ;B INC R0 CJNE @R0,#44H,OUT_OF_DATA ;D INC R0 CJNE @R0,#31H,OUT_OF_DATA ;1 INC R0 CJNE @R0,#36H,OUT_OF_DATA ;6 INC R0 CJNE @R0,#43H,OUT_OF_DATA ;C INC R0 CJNE @R0,#44H,OUT_OF_DATA ;D INC R0 CJNE @R0,#41H,OUT_OF_DATA ;A MOV P1,#60H MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_24 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY MOV P1,#0FFH AJMP WAIT_DATA ;---------------------------------; ; OUT OF DATA ; ;---------------------------------; OUT_OF_DATA: MOV LCD_ADDR,#040H ; กำหนดค่า Address เป็น 40H LCALL SET_ADDR_LCD MOV DPTR,#TITLE_03 ; กำหนดตัวชี้ตำแหน่งของตัวอักษรที่ต้องการแสดงผล LCALL WRLINE_LCD ; เรียกโปรแกรมย่อยเพื่อเขียนไปยังตำแหน่ง 40H-4FH LCALL DELAY_1s LCALL LCD_OFF ; เรียกโปรแกรมย่อย ปิดจอแสดงผล LCALL DELAY_1s LCALL LCD_ON ; เรียกโปรแกรมย่อย เปิดจอแสดงผล LCALL DELAY_1s LCALL LCD_OFF ; เรียกโปรแกรมย่อย ปิดจอแสดงผล LCALL DELAY_1s LCALL LCD_ON ; เรียกโปรแกรมย่อย เปิดจอแสดงผล LCALL DELAY_1s LCALL LCD_OFF ; เรียกโปรแกรมย่อย ปิดจอแสดงผล LCALL DELAY_1s LCALL LCD_ON ; เรียกโปรแกรมย่อย เปิดจอแสดงผล LCALL DELAY LCALL CLR_BUFFER LJMP INITIAL ;---------------------------------; ; CLAER RAM BUFFER ; ;---------------------------------; CLR_BUFFER: MOV R0,#START_POINT_BUFFER CLR A CLR_BUFFER1: MOV @R0,A INC R0 CJNE R0,#START_POINT_BUFFER+14,CLR_BUFFER1 RET ;--------------------------------------------------------------------------------- ; LCD Initialize โปรแกรมย่อยเพื่อเตรียมการทำงานเริ่มต้น LCD ;--------------------------------------------------------------------------------- INIT_LCD: LCALL DELAY_100ms ; หน่วงเวลา เพื่อให้จอแอลซีดีพร้อมก่อน CLR P2.7 ; ขา RS เป็น 0 เพื่อแจ้งให้ทราบว่าเป็นการส่งคำสั่ง MOV P0,#00111000B ; กำหนดโหมดเป็นแบบ 8bit LCALL LCD_CLK ; ส่งพัลซ์ 1 ลูก ที่ขา Enable LCALL DELAY_10ms ; หน่วงเวลาเพื่อให้จอฯพร้อมรับคำสั่งถัดไป LCALL LCD_OFF ; เรียกโปรแกรมย่อย ปิดจอแสดงผล LCALL LCD_CLR ; เรียกโปรแกรมย่อย ล้างค่าจอแสดงผล MOV P0,#00000110B ; กำหนดโหมดการป้อนข้อมูล LCALL LCD_CLK ; ส่งพัลซ์ 1 ลูก ที่ขา Enable LCALL LCD_HOME ; เรียกโปรแกรมย่อยเพื่อย้ายเคอร์เซอร์ไปยังตำแหน่งแรก ;----------------------------------------------------------------- ; LCD Clear Display โปรแกรมย่อยล้างค่าจอแสดงผล ;----------------------------------------------------------------- LCD_CLR: CLR P2.7 MOV P0,#00000001B ACALL LCD_CLK RET ;---------------------------------------------------------------------------------------- ; LCD Return Home โปรแกรมย่อยเพื่อย้ายเคอร์เซอร์ไปยังตำแหน่งแรก ;---------------------------------------------------------------------------------------- LCD_HOME: CLR P2.7 MOV P0,#00000010B ACALL LCD_CLK RET ;---------------------------------------------------------- ; LCD Display Off โปรแกรมย่อย ปิดจอแสดงผล ;----------------------------------------------------------- LCD_OFF: CLR P2.7 MOV P0,#00001000B ACALL LCD_CLK RET ;-------------------------------------------------------------------- ; LCD Clk โปรแกรมย่อยเพื่อ ส่งพัลซ์ 1 ลูก ที่ขา Enable ;-------------------------------------------------------------------- LCD_CLK: SETB P2.6 LCALL LCD_DELAY CLR P2.6 LCALL LCD_DELAY RET ;-------------------------------------------------------------- ; LCD Display On โปรแกรมย่อย เปิดจอแสดงผล ;-------------------------------------------------------------- LCD_ON: CLR P2.7 MOV P0,#00001100B LCALL LCD_CLK RET ;-------------------------------------------------------- ; LCD Cursor On โปรแกรมย่อย เปิดเคอร์เซอร์ ;-------------------------------------------------------- LCD_BLINK: CLR P2.7 MOV P0,#00001111B LCALL LCD_CLK RET ;------------------------------------------------------------------------------------------- ; LCD Left Shift Display โปรแกรมย่อย เลือกการแสดงผลไปทางซ้าย 1 ครั้ง ;-------------------------------------------------------------------------------------------- LCD_LSHF: CLR P2.7 MOV P0,#00011000B LCALL LCD_CLK RET ;--------------------------------------------------------------------------------------------- ; LCD Right Shift Display โปรแกรมย่อย เลือกการแสดงผลไปทางขวา 1 ครั้ง ;--------------------------------------------------------------------------------------------- LCD_RSHF: CLR P2.7 MOV P0,#00011100B LCALL LCD_CLK RET ;---------------------------------------------------------------------------------- ; Set LCD Address โปรแกรมย่อยเพื่อกำหนดตำแหน่งในจอแอลซีดี ;--------------------------------------------------------------------------------- SET_ADDR_LCD: CLR P2.7 MOV A,LCD_ADDR SETB ACC.7 MOV P0,A LCALL LCD_CLK RET ;------------------------------------------------------------------------------------------- ; Write Character to show LCD โปรแกรมย่อยเพื่อแสดงตัวอักษรที่ต้องการ ;------------------------------------------------------------------------------------------- WRCHAR_LCD: SETB P2.7 MOV P0,LCD_DATA LCALL LCD_CLK LCALL LCD_ON RET ;------------------------------------------------------------------------------------------------------------------- ; Write Line of 16 Character from ROM โปรแกรมย่อยเพื่อส่งตัวอักษรจาก ROM ไปจอแอลซีดี ;------------------------------------------------------------------------------------------------------------------- WRLINE_LCD: MOV R0,#0 WRLINE_LCD_1: SETB P2.7 CLR A MOVC A,@A+DPTR MOV P0,A LCALL LCD_CLK INC DPTR INC R0 CJNE R0,#16,WRLINE_LCD_1 LCALL LCD_ON RET ;--------------------------------------------------------------------------------------- ; DELAY ROUTINE โปรแกรมย่อยสำหรับหน่วงเวลา ;--------------------------------------------------------------------------------------- LCD_DELAY: MOV R7,#002 LCD_DELAY_1: MOV R6,#0E6H LCD_DELAY_2: NOP NOP DJNZ R6,LCD_DELAY_2 DJNZ R7,LCD_DELAY_1 RET DELAY_10ms: MOV R7,#010 DELAY_10ms_1: MOV R6,#0E6H DELAY_10ms_2: NOP NOP DJNZ R6,DELAY_10ms_2 DJNZ R7,DELAY_10ms_1 RET DELAY_100ms: MOV R7,#100 DELAY_100ms_1: MOV R6,#0E6H DELAY_100ms_2: NOP NOP DJNZ R6,DELAY_100ms_2 DJNZ R7,DELAY_100ms_1 RET DELAY_1s: MOV R5,#100 DELAY_1s_1: LCALL DELAY_10ms DJNZ R5,DELAY_1s_1 RET DELAY: MOV R2,#250 DEL1: MOV R3,#80 DEL2: MOV R4,#80 DJNZ R4,$ DJNZ R3,DEL2 DJNZ R2,DEL1 RET ;------------------------------------------------------------------------------------- ; กำหนดค่าข้อมูลของตัวอักษรที่ต้องการ เก็บไว้ที่หน่วยความจำ ROM ; Define Constant ( Store in Flash EEPROM Program Memory ) ;------------------------------------------------------------------------------------- TITLE_01: DFB "AUTO CAR PARKING " TITLE_02: DFB " Proximity card " TITLE_03: DFB " Unknown card " TITLE_04: DFB "AUTOMATIC CAR " TITLE_05: DFB "PARKING " TITLE_1: DFB " User ID : 1 " TITLE_2: DFB " User ID : 2 " TITLE_3: DFB " User ID : 3 " TITLE_4: DFB " User ID : 4 " TITLE_5: DFB " User ID : 5 " TITLE_6: DFB " User ID : 6 " TITLE_7: DFB " User ID : 7 " TITLE_8: DFB " User ID : 8 " TITLE_9: DFB " User ID : 9 " TITLE_10: DFB " User ID : 10 " TITLE_11: DFB " User ID : 11 " TITLE_12: DFB " User ID : 12 " TITLE_13: DFB " User ID : 13 " TITLE_14: DFB " User ID : 14 " TITLE_15: DFB " User ID : 15 " TITLE_16: DFB " User ID : 16 " TITLE_17: DFB " User ID : 17 " TITLE_18: DFB " User ID : 18 " TITLE_19: DFB " User ID : 19 " TITLE_20: DFB " User ID : 20 " TITLE_21: DFB " User ID : 21 " TITLE_22: DFB " User ID : 22 " TITLE_23: DFB " User ID : 23 " TITLE_24: DFB " User ID : 24 "
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 29, 2011, 12:49:31 pm
program ที่แยกไว้ก็คือ library ครับ เวลาจะใช้ก็ call เอา แต่ program ทั้งหมดต้องใช้ mem ร่วมกัน จึงต้องแบ่งให้ชัดเจน เช่น key buffer อยู่ 40h - 48h buffer ของ i2c อยู่ 50h- 55h เวลาเรียก library ก็อ้างตำแหน่งดังกล่าวในการอ่านเขียนหรือส่งผ่านข้อมูล.....
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 01:14:53 pm
ตรงนี้ไม่รู้จริงๆครับ undecided2 undecided2 undecided2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 01:19:32 pm
แต่ส่วนที่เป็นโปรแกรมย่อย แล้วเรียกใช้งานใน main program พอเข้าใจครับ
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 29, 2011, 04:27:07 pm
เดียวเอาตัวอย่างให้ดู.....
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 29, 2011, 06:17:17 pm
ตัวอย่างครับ เป็นการส่งค่า Hello ออก lcd จะเห็นว่ามี library สองตัว spi และ 4 bit โดยการใช้งานจะส่งค่าผ่าน acc register เป็นหลัก ถ้าผมต้องการ interface กับ lcd แบบ 4 bit ผมก็ไปใช้ library 4 bit ถ้าต้องการใช้ lcd แบบ spi ผมก็ไปใช้ library ของ spi แทน ซึ่ง main program ไม่ต้องแก้อะไรเลย library มันก็เหมือนกับ driver นั่นแหละ จะติดต่อกับอะไรก็ผ่าน driver แทน เช่นผมอาจจะสร้าง driver ของ I2c-24c256 ผมอาจจะใช้คำสั่งหลักๆใน library ดังนี้ 1. write_i2c: 2. read_i2c: 3. init_i2c: โดยทั้งหมดส่งค่าผ่าน acc register เช่น ผมต้องการเขียนข้อมูล 0xfa ไปยัง i2c mov a,#0fah acall write_i2c เป็นต้น......... นี่คือทั้งหมดแล้วครับ ขึ้นอยู่กับคุณว่าจะทำความเข้าใจได้มากน้อยแค่ไหน..... memory map ก็คือ ช่วงของข้อมูล ที่เรากำหนดไว้ใช้ใน main กับ library ต่างๆ.... ซึ่งบางทีอาจมีตำแหน่งเดียวกันหรือต่างกันก็ได้.... main program ;//*** reset vector ***//; org 0000h ajmp initial ;//*** ap start ***//; org 0030h initial: mov p1,#0ffh mov p3,#0ffh mov sp,#070h mov r0,#07fh clr a mov @r0,a djnz r0,$-1
;//*** main program ***//; main: acall lcdinit ;--->>> library call initial lcd
mov a,#"H" ;--->>> load data to acc (data link to library) acall lcdputchar ;--->>> library call put one char from acc mov a,#"e" ;--->>> load data to acc (data link to library) acall lcdputchar ;--->>> library call put one char from acc mov a,#"l" ;--->>> load data to acc (data link to library) acall lcdputchar ;--->>> library call put one char from acc mov a,#"l" ;--->>> load data to acc (data link to library) acall lcdputchar ;--->>> library call put one char from acc mov a,#"o" ;--->>> load data to acc (data link to library) acall lcdputchar ;--->>> library call put one char from acc
ajmp main ;//*** lcd library spi interface ***//; lcd_dat bit p1.0 lcd_lat bit p1.1 lcd_clk bit p1.2 $include (lcdspi.asm)
;//*** lcd library 4bit interface ***//; ;lcd_rw bit p1.0 ;lcd_rs bit p1.1 ;lcd_e bit p1.2 ;lcd_db4 bit p1.3 ;lcd_db5 bit p1.4 ;lcd_db6 bit p1.5 ;lcd_db7 bit p1.6 ;$include (lcd4bit.asm)
end spi library ;//******************************//; ;//* 74HC595 DRIVE LCD LIBRARY *//; ;//******************************//; ;//* AUTHOR BY SOMLAK MANGNIMIT *//; ;//* DATE: 8/11/2009 *//; ;//* FILE VERSION 2.0 *//; ;//* LAST UPDATE 18/11/2009 *//; ;//******************************//;
;//******************************//; ;//* HOW TO USE SPI LCD LIBRARY *//; ;//******************************//; ;1.SET PORT&PIN NAME ;LCD_DAT BIT P1.0 ;CONNECT TO ETT SPI PIN 2 ;LCD_LAT BIT P1.1 ;CONNECT TO ETT SPI PIN 3 ;LCD_CLK BIT P1.2 ;CONNECT TO ETT SPI PIN 4
;2.USE CALL LCDINIT
;3.LIBRARY CALL ;3.1 (LCDPUTCMD) USE FOR WRITE COMMAND TO LCD ;3.2 (LCDPUTCHAR) USE FOR WRITE DATA TO LCD
;//***CAUTION!!!***//; ;THIS LIBRARY NOT CHECK LCD BUSY FLAG AND USE FOR X-TAL 11.0592MHZ. ;WHEN USE OTHER FREQ LCD DELAY NEED TO CALIBRATION. ;WHEN USE LCD CLEAR AND RETURN HOME COMMAND. AFTER COMMAND NEED WAIT > 2.5MS
;//***REGISTER IN USE***//; ;REGISTER "ACC" **DESTROY AFTER USE LIB CALL** ;REGISTER "B" **DESTROY AFTER USE LIB CALL** ;REGISTER "R0" **NOT USE AFTER LCD INITIAL** ;REGISTER "R1" **NOT USE AFTER LCD INITIAL**
;//*******************************//; ;//* DATA BIT FOR SHIFT REGISTER *//; ;//*******************************//;
LCD_BL BIT ACC.0 LCD_RS BIT ACC.1 LCD_RW BIT ACC.2 LCD_E BIT ACC.3 LCD_DB4 BIT ACC.4 LCD_DB5 BIT ACC.5 LCD_DB6 BIT ACC.6 LCD_DB7 BIT ACC.7
;//**********************//; ;//* LCD INITIALISATION *//; ;//**********************//;
LCDINIT: CLR LCD_LAT CLR LCD_CLK MOV A,#000H CALL MOVE_DATA CALL LCDDELAY15M MOV A,#030H CALL LCDRESETCMD CALL LCDDELAY5M MOV A,#030H CALL LCDRESETCMD CALL LCDDELAY100U MOV A,#030H CALL LCDRESETCMD
;//**************//; ;//* 4 BIT MODE *//; ;//**************//;
MOV A,#020H CALL LCDRESETCMD
;//****************//; ;//* FUNCTION SET *//; ;//****************//;
MOV A,#028H ;4-BIT-INTERFACE,2-LINES CALL LCDPUTCMD
;//***************//; ;//* DISPLAY OFF *//; ;//***************//;
MOV A,#008H ;DISP.OFF,CURS.OFF,NO-BLINK CALL LCDPUTCMD ;//*****************//; ;//* DISPLAY CLEAR *//; ;//*****************//;
MOV A,#001H CALL LCDPUTCMD CALL LCDDELAY5M
;//******************//; ;//* ENTRY MODE SET *//; ;//******************//;
MOV A,#006H ;AUTO-INC (SHIFT-CURSOR) CALL LCDPUTCMD
;//**************//; ;//* DISPLAY ON *//; ;//**************//;
MOV A,#00CH ;DISP.ON,CURS.OFF JMP LCDPUTCMD
;//*******************//; ;//* WRITE CHARACTER *//; ;//*******************//;
LCDPUTCHAR: CALL LCDBUSY PUSH ACC CLR LCD_RW SETB LCD_RS SETB LCD_E CALL MOVE_DATA POP ACC SWAP A CLR LCD_RW SETB LCD_RS SETB LCD_E CLR LCD_E CALL MOVE_DATA RET
;//********************************//; ;//* INTERNAL RESET WRITE COMMAND *//; ;//********************************//;
LCDRESETCMD: CLR LCD_RW SETB LCD_E CLR LCD_E CALL MOVE_DATA RET
;//*****************//; ;//* WRITE COMMAND *//; ;//*****************//;
LCDPUTCMD: CALL LCDBUSY PUSH ACC CLR LCD_RW CLR LCD_RS SETB LCD_E POP ACC SWAP A CLR LCD_RW CLR LCD_RS SETB LCD_E CALL MOVE_DATA CLR LCD_E RET
;//*******************************//; ;//* SEND DATA TO SHIFT REGISTER *//; ;//*******************************//;
MOVE_DATA: SETB LCD_BL PUSH ACC MOV B,#8 SHIFT: RLC A MOV LCD_DAT,C SETB LCD_CLK NOP CLR LCD_CLK DJNZ B,SHIFT NOP CLR LCD_LAT POP B POP ACC RET
;//*****************//; ;//* DELAY ROUTINE *//; ;//*****************//;
LCDBUSY: PUSH B MOV B,#20 POP B RET
LCDDELAY100U: MOV R0,#50 DJNZ R0,$ RET
LCDDELAY5M: MOV R0,#5 SJMP LCDDELAY
LCDDELAY15M: MOV R0,#15 SJMP LCDDELAY
;//*********************//; ;//* SUB DELAY ROUTINE *//; ;//*********************//;
LCDDELAY: MOV R1,#230 LCDDELAY1: NOP NOP DJNZ R1,LCDDELAY1 RET
;//****************************//; ;//* END OF LCD 4 BIT LIBRARY *//; ;//****************************//; 4bit library ;//***************************//; ;//* LCD 4 BIT LIBARRY *//; ;//***************************//; ;//* USE FOR MCS-51 CPU *//; ;//* REGISTER : R0,R1,ACC,B *//; ;//* By Somlak Mangnimit *//; ;//* DATE 10/07/2009 *//; ;//* LAST UPDATE 18/11/2009 *//; ;//***************************//;
;//* PORT&PIN NAME USE FOR THIS LIB *//; ;LCD_RW ;LCD_RS ;LCD_E ;LCD_DB4 ;LCD_DB5 ;LCD_DB6 ;LCD_DB7
;//**********************//; ;//* LCD INITIALISATION *//; ;//**********************//;
LCDINIT: CLR LCD_RW CLR LCD_RS CLR LCD_E MOV A,#000H ACALL MOVE_DATA ACALL LCDDELAY15M MOV A,#030H ACALL LCDRESETCMD ACALL LCDDELAY5M ACALL LCDDELAY100U MOV A,#030H ACALL LCDRESETCMD
;//**************//; ;//* 4 BIT MODE *//; ;//**************//;
MOV A,#020H ACALL LCDRESETCMD
;//****************//; ;//* FUNCTION SET *//; ;//****************//;
MOV A,#028H ;4-BIT-INTERFACE,2-LINES ACALL LCDPUTCMD
;//***************//; ;//* DISPLAY OFF *//; ;//***************//;
MOV A,#008H ;DISP.OFF,CURS.OFF,NO-BLINK ACALL LCDPUTCMD ;//*****************//; ;//* DISPLAY CLEAR *//; ;//*****************//;
MOV A,#001H ACALL LCDPUTCMD
;//******************//; ;//* ENTRY MODE SET *//; ;//******************//;
MOV A,#006H ;AUTO-INC (SHIFT-CURSOR) ACALL LCDPUTCMD
;//**************//; ;//* DISPLAY ON *//; ;//**************//;
MOV A,#00CH ;DISP.ON,CURS.OFF AJMP LCDPUTCMD
;//*******************//; ;//* BUSY FLAG CHECK *//; ;//*******************//;
LCDBUSY: MOV A,#0FFH ACALL MOVE_DATA CLR LCD_RS SETB LCD_RW SETB LCD_E MOV C,LCD_DB7 CLR LCD_E NOP SETB LCD_E JC LCDBUSY LCDNOTBUSY: CLR LCD_RW MOV A,#000H AJMP MOVE_DATA
;//*******************//; ;//* WRITE CHARACTER *//; ;//*******************//;
LCDPUTCHAR: PUSH B MOV B,A ACALL LCDBUSY CLR LCD_RW SETB LCD_RS MOV A,B SETB LCD_E SWAP A SETB LCD_E ACALL MOVE_DATA CLR LCD_E POP B RET
;//********************************//; ;//* INTERNAL RESET WRITE COMMAND *//; ;//********************************//;
LCDRESETCMD: PUSH B MOV B,A ACALL LCDBUSY CLR LCD_RW CLR LCD_RS MOV A,B SETB LCD_E ACALL MOVE_DATA CLR LCD_E POP B RET
;//*****************//; ;//* WRITE COMMAND *//; ;//*****************//;
LCDPUTCMD: PUSH B MOV B,A ACALL LCDBUSY CLR LCD_RW CLR LCD_RS MOV A,B SWAP A SETB LCD_E ACALL MOVE_DATA CLR LCD_E POP B RET
;//*************************//; ;//* MOVE DATA TO LCD PORT *//; ;//*************************//;
MOVE_DATA: MOV C,ACC.4 MOV LCD_DB4,C MOV C,ACC.5 MOV LCD_DB5,C MOV C,ACC.6 MOV LCD_DB6,C MOV C,ACC.7 RET
;//*****************//; ;//* DELAY ROUTINE *//; ;//*****************//;
LCDDELAY100U: MOV R0,#50 DJNZ R0,$ RET
LCDDELAY5M: MOV R0,#5 SJMP LCDDELAY
LCDDELAY15M: MOV R0,#15 SJMP LCDDELAY
;//*********************//; ;//* SUB DELAY ROUTINE *//; ;//*********************//;
LCDDELAY: MOV R1,#230 LCDDELAY1: NOP NOP DJNZ R1,LCDDELAY1 RET
;//****************************//; ;//* END OF LCD 4 BIT LIBRARY *//; ;//****************************//;
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ เมษายน 29, 2011, 07:06:15 pm
ไม่รู้ว่าผมเข้าใจถูกหรือป่าวครับ ว่า library มันก็คือโปรแกรมย่อยหนึ่ง ที่เตรียมไว้เพื่อเรียกใช้ในโปรแกรมหลัก แล้วเมื่อ library ทำงานของตัวเองเรียบร้อยแล้ว ก็จะย้อนกับมาที่ โปรแกรมหลัก
แล้วโปรแกรมผมก็ต้อง แยก library ไว้ แล้วเขียนให้โปรแกรมหลักเรียกใช้เอา
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ เมษายน 29, 2011, 11:44:08 pm
ใกล้เคียงครับ library มันก็คือ driver นั่นแหละ เวลาแก้ไขมันจะง่าย.... อย่างวงจรที่คุณออกแบบมา ก็ต้องมี driver ของ
1.keypad 2.I2C eeprom 3.PLC 4.LCD ................bra bra bra......
ต้องการให้อุปกรณ์ตัวไหนทำไร ก็เรียกใช้ใน main ผ่าน driver โดยอาจ reserved ram ไว้ใช้งานใน main ไว้ส่วนนึ่ง
เช่น ผมต้องการอ่านค่า key ออก lcd ใน main ผมอาจจะเขียนอย่างนี้....
//******main*****//
main: acall read_keypad ;--->>> library call return value in acc add a,#30 ;--->>> convert to ascii acall lcdputchar ;--->>> library call send char data in acc to lcd
เขียนแบบนี้มันจะแก้ไขได้ง่าย เช่นหากติดต่อกับ อุปกรณ์ไหนแล้วมีปัญหา ก็ไปแก้ไข driver แล้วก็ test program ใน main แทน........
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ พฤษภาคม 04, 2011, 03:45:22 pm
undecided2 ไม่รู้จะเริ่มยังไง ได้แต่หลักการ undecided2
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 04, 2011, 04:03:27 pm
เขียน program interface อปกรณ์แต่ละตัวได้หรือยัง.....
ถ้าไม่ได้จริงๆก็คงต้องจ้างทำล่ะครับ... ง่ายตอนส่งลำบากตอน presence..... :)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ พฤษภาคม 04, 2011, 05:50:00 pm
ก็คงจะเป็นอย่างงั้นครับ >:( แต่ถ้าจ้างจริงก็คงต้องจ้างเป็น asm นี่แหละครับ แล้วก็คงต้องทำความเข้าใจเอง
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ พฤษภาคม 04, 2011, 05:54:19 pm
undecided2 คงเป็นเพราะพื้นฐานไม่ค่อยแน่น แต่ เรื่องอื่นก็เสร็จหมดแล้ว เหลือไมโครอย่างเดียวเลย :D
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: RANGSAN007 ที่ พฤษภาคม 08, 2011, 09:36:16 am
ท่าน JUB รับทำไหมครับ :) :) :) :) ;) :) ;)
หัวข้อ: Re: RFID กับ MCS-51 ขอความช่วยเหลือครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 08, 2011, 03:03:06 pm
ไม่ได้รับงาน project ครับ ลองไปเดิน บ้านหม้อดูครับ มีร้านรับทำเยอะเหมือนกัน... :)
|