RFID กับ MCS-51 ขอความช่วยเหลือครับ
LSVคลังสมองออนไลน์ "ปีที่14"
พฤศจิกายน 24, 2024, 07:59:41 pm *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
 
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1] 2   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: RFID กับ MCS-51 ขอความช่วยเหลือครับ  (อ่าน 26492 ครั้ง)
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« เมื่อ: กุมภาพันธ์ 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 ครับ )   ขอความช่วยเหลือด้วยครับ     


บันทึกการเข้า

JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #1 เมื่อ: กุมภาพันธ์ 16, 2011, 10:56:46 pm »

ในส่วนของ program ไม่ยากครับถ้าเป็นแบบที่ว่ามา แต่ที่ว่าขา9มันส่ง
ascii ออกมาน่ะมังส่งมาแบบไหน baud เท่าไร ส่งมากี่ byte ถ้าไม่รู้
ก็ไปต่อไม่ได้ครับ...  Smiley
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #2 เมื่อ: กุมภาพันธ์ 17, 2011, 12:36:17 am »

เพิ่มเติมครับ baud 9600    
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #3 เมื่อ: กุมภาพันธ์ 17, 2011, 12:44:25 am »



ลองการ์ดหลายใบ
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #4 เมื่อ: กุมภาพันธ์ 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 มาบ้างหรือป่าว...Huh?

 Smiley
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #5 เมื่อ: กุมภาพันธ์ 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         
..
..
..
..
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #6 เมื่อ: กุมภาพันธ์ 18, 2011, 06:38:53 pm »

คือตอนนี้ ที่ต้องการคือ   เราเขียนโปรแกรมเก็บ ID  เข้าไปในส่วน source code แล้วเมื่อมีการ์ดมาก็อ่านแล้วเอา ID ที่อ่านได้ ไปเช็ค กับ ID ใน source code ที่เราเขียนไว้แล้ว ว่าตรงกันหรือไม่ ครับ
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #7 เมื่อ: กุมภาพันธ์ 18, 2011, 06:50:58 pm »

อ้างอิงข้อมูลจาก http://wara.com/article-747.html
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #8 เมื่อ: กุมภาพันธ์ 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:
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #9 เมื่อ: กุมภาพันธ์ 18, 2011, 09:32:11 pm »

ขอบคุณมากครับ  แต่ผมติดปัญหาตรงที่ ว่า  เวลา เอาการ์ดใบที่ไม่ได้คีย์ข้อมูลไว้มาทาบที่เครื่องอ่าน  ก่อนที่จะเอาใบที่มีการคีย์ไว้ มาทาบ  เวลาเอาใบที่คีย์ข้อมูลไว้มาทาบโปรแกรมจะไม่ยอมรับการ์ดใบนี้  คือต้องทาบซ้ำ ๆ ไปประมาณ 5-8 ครั้ง ถึงจะได้     แต่ถ้าเอาใบที่คีย์ข้อมูลไว้แล้วมาทาบเป็นใบแรกก็จะทำงานปกติ       หรือเวลาเช็ค data ที่ตำแหน่งต่าง แล้วเกิด error  ผมต้องทำอะไรก่อนที่จะทำการอ่านครั้งใหม่หรือป่าวครับ หรือผมต้องคืนค่าอะไรอีกหรือป่าวครับ 
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #10 เมื่อ: กุมภาพันธ์ 18, 2011, 09:52:09 pm »

มัน error ก็ไม่ทำงานไงครับ กลับเข้า loop ใหม่ไม่มีอะไรเกิดขึ้น...
ผมก็ งงๆ นะ ปัญหาหามันเกิดจาก ตัว module rfid หรือป่าว
เอา data ตอน error มาให้ดูหน่อย...

แล้ว card ที่คีกับไม่คี ท่านจะเอามาลองทำไมถ้ามันเกิดปัญหา..... Huh?
มันเกิน concept งานที่บอกไว้แล้วนะครับ....
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #11 เมื่อ: กุมภาพันธ์ 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

บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #12 เมื่อ: กุมภาพันธ์ 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

บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #13 เมื่อ: กุมภาพันธ์ 18, 2011, 10:43:11 pm »

แล้วตอนนี้ปัญหามีอะไรบ้างครับ...  Smiley
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #14 เมื่อ: กุมภาพันธ์ 18, 2011, 11:02:18 pm »

ตอนนี้  ถ้าคีย์ทุกใบแล้วก็ไม่น่ามีปัญหาอะไรครับ  แต่  ไม่รู้ว่าถ้า คีย์ 24 ใบไม่รู้จะได้ป่าว  แค่ใบเดียวกินไป 30 บรรทัด ถ้า 24 ใบก็เยอะพอสมควร  พอจะมีแบบสั้นๆ หรือป่าว  แต่ถ้าไม่มีก็ไม่เป็นไรครับ    แนวคิดผมผมคิดว่าถ้า data ตำแหน่งไหนเหมือนกันก็ไม่ต้อง เช็คข้ามไปเลย ไม่รู้จะได้ป่าว       แค่นี้ก็น่าจะพอครับ  งานต่อไปก็คือเขียน PLC ครับ    ขอมคุณท่าน JUB  มากๆครับ  wav!! Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy Cheesy
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #15 เมื่อ: กุมภาพันธ์ 18, 2011, 11:27:41 pm »

จะใช้กี่ใบก็ต้องเขียนแบบนี้ครับ ถ้าจะให้สั้นๆ
ต้องใช้วิธีเปิดตารางครับ คือ ทำตารางข้อมูลของ card แต่ละใบไว้
แล้วเวลาตรวจสอบ card ให้เขี่ยนโปรแกรมย่อยขึ้นมา
เพื่อนำค่าจาก buffer มาเทียบกับค่าในตารางที่อยู่ใน programmory
ที่เราได้ทำไว้ เวลาแก้ไขก็ทำได้ง่ายด้วยครับ.... คงพอมองภาพออกนะ....  Smiley

อันนี้ผมแก้ 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
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #16 เมื่อ: กุมภาพันธ์ 19, 2011, 12:34:31 pm »

  ครับ ขอบคุณมากครับ
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #17 เมื่อ: เมษายน 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 ที่ใช้ได้
ขอคำแนะนำด้วยครับ จนจริงๆครับ
โค๊ด:
		;##############################
;#   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





บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #18 เมื่อ: เมษายน 26, 2011, 03:30:49 pm »

รูปไม่ขึ้นhttp://image.free.in.th/show.php?id=8a77b83b62b9d889a18e6f5d16ffdfa4
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #19 เมื่อ: เมษายน 26, 2011, 03:35:11 pm »

แนวคิดตามรูป http://image.free.in.th/show.php?id=8a77b83b62b9d889a18e6f5d16ffdfa4

แต่ไม่รู้จะเพิ่ม eeprom มายังไง  ผมว่าจะเพิ่มที่ P2 เพราะได้ใช้แค่ 2 เส้น ยังเหลือ 6 เส้น  ช่วยแนะแนวทางการติดต่อกับ eeprom ให้หน่อยครับ     ขอบคุณมากๆครับ   
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #20 เมื่อ: เมษายน 26, 2011, 06:00:43 pm »

I2C หรือ SPI ...... google ตัวอย่างเยอะแยะ....  Smiley
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #21 เมื่อ: เมษายน 27, 2011, 04:26:29 pm »

เจอแต่ C ไม่มี asm เลย
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #22 เมื่อ: เมษายน 28, 2011, 08:40:11 am »

มีครับลองหาดูดีๆ.....
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #23 เมื่อ: เมษายน 28, 2011, 01:01:18 pm »

ช่วยดูแนวทางให้ผมหน่อยครับว่ามันเป็นไปได้ไหม  แล้วถ้าไม่ได้ควรแก้ใขอย่างไร
            เริ่มตัน ตัวเครื่องยังไม่มีข้อมูลบัตร  ต้องกดรหัส *1234 แล้วตามด้วยตำแหน่งผู้ใช้ เช่น ผู้ใช้คนที่ 1 ให้กด 01 แล้วนำการ์ดมาทาบ ตัวเครื่องจะทำการบันทึกข้อมูลบัตรคนที่ 1  จนถึง คนที่ 24 (สำหรับเจ้าของเครื่อง)
การทำงาน     เช่นคนที่ 1 ต้องการนำรถเข้ามาจอด ก็ทาบบัตร แล้วกดรหัส 4 ตัวอะไรก็ได้ตามใจผู้ใช้  แล้วเครื่องจะส่งเลขฐาน 16 ออกมาสั่งงาน PLC ที่ P1 เช่นคนที่ 1 ส่งข้อมูล 0000 0001                                       
                   แล้วเวลานำรถออก ก็ทาบการ์ด ตามด้วยการกดรหัส 4 ตัวเดิมที่กดไว้ตอนนำรถเข้าจอด แล้วเครื่องจะส่งเลขฐาน 16 ออกมาสั่งงาน PLC เหมือนเดิม  แล้วเครื่องจะทำการเคลียรหัส (เพื่อในกรณีเปลี่นเจ้าของบัตร  ง่ายๆคือ กดครั้งแรกเป็นอะไรก็ได้แต่ตอนนำรถออกให้จำให้ได้)    การทำงานก็ประมาณนี้ครับไม่รู้ว่าได้หรือไม่    Cheesy Cheesy Cheesy
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #24 เมื่อ: เมษายน 28, 2011, 01:55:13 pm »

ไม่รู้ว่าต่อแบบนี้ได้ป่าวครับ แล้วจะเก็บข้อมูลพอหรือไม่ครับ     แล้วการเขียนตามเงื่อนใขจะได้ป่าวครับ
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #25 เมื่อ: เมษายน 28, 2011, 02:16:27 pm »

บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #26 เมื่อ: เมษายน 28, 2011, 02:32:11 pm »

ท่านใดรับสอน asm ตามเงื่อนใขด้านบน ช่วยติดต่อ  PM 
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #27 เมื่อ: เมษายน 28, 2011, 10:35:42 pm »

ลองเขียน flowchart ลำดับการทำงานดูก่อน เรื่อง program ไม่ยาก.......
บันทึกการเข้า
RANGSAN007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #28 เมื่อ: เมษายน 29, 2011, 12:06:32 am »

เมื่อทำการบันทึกข้อมูลการ์ดโดยกด *1234 แล้ว  ในกรณีที่เครื่องทำงานอยู่สามารถกด *1234 เพื่อบันทึกการ์ดใบอื่นๆในกรณี เปลี่ยนการ์ดหรือการ์ดใบเดิมหาย



ขั้นตอนการบันทึกข้อมูลหรือเปลี่ยนการ์ดจะทำโดยเจ้าของเครื่องไม่ใช่ผู้ใช้
บันทึกการเข้า
หน้า: [1] 2   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2006, Lewis Media

lsv2555Please follow the new website at https://www.pohchae.com

Valid CSS!