| The Datasheet Archive - 100 Million Datasheets from 7500 Manufacturers. |
Gray Creager, August 1993 keeping with tradition Xicor's microcontroll
Top Searches for this datasheetInterfacing X9241 E2POT Digital Potentiometer 8051 Microcontrollers Gray Creager, August 1993 keeping with tradition Xicor's microcontroller solutions handbook, present following routines control X9241 quad digitally controllable potentiometer. X9241 variety different instructions that provide flexibility designer. Additionally, nonvolatile nature device allows stored wiper positions that retrieved after power cycles. following code implements available X9241 instructions using standard bidirectional protocol. Although routines occupy less than bytes program memory, designers won't need implement X9241 instructions shorten code removing unnecessary routines. However, this will necessitate reassembly code. those instructions which program nonvolatile data registers (XFR_WCR, GXFR_WCR, WRITE_DR), acknowledge polling been implemented determine early completion internal write cycle. Although this automatically handled routines, word regarding procedure should informative. After issuing start condition, master sends slave address receives acknowledge. then issues instruction byte X9241 again receives acknowledge. necessary, transmits data byte receives final acknowledge. master must then initiate stop condition which will cause X9241 begin internal write cycle. X9241 pins high impedance until this internal cycle complete. master begin acknowledge polling successively sending start conditions followed "dummy" instructions. When X9241 finally answers with acknowledge, internal write cycle been completed master must initiate stop condition. After next start condition, X9241 ready receive further instructions. code listing, assumption made that code would execute upon reset microcontroller. code also loaded into memory, however this changed with assembler directive. simple MAIN program exercise these routines included next page. this listing, commands cause X9241 A3A2A1A0 0000) accessed rewritten with value (for wiper position #43). Then pulse decrement wiper initiated, causing selected reduced value (for wiper position #28). issuing other commands follows same general procedure. Fig. representative hardware connection between X9241 8051 family microcontroller shown. pull-up resistors lines determined total capacitance devices connected bus, which about 18pF this case, however these necessary since port pins 8051 family devices have internal pull-ups. This code available Xicor's Bulletin Board Service. Xicor reached continental U.S. dialing 1-800-2588864, from (408) calling area internationally dialing 1-408-943-0655. will support 19.2K baud rate modem parity, words, stop bit, local echo). Code X9241 quad accessed from EEPOT (Special Interest Group). Xicor, Inc. 1511 Buckeye Drive Milpitas, 95035 (408) 432-8888 AN20-1 Xicor MAIN: ADDR_BYTE,#01010000b ID,#00001000b COMMAND,#4 DATA_BYTE,#00101011b call INTERPRET ID,#00001000b PULSES,#00001111b COMMAND,#32 call INTERPRET LOAD SLAVE ADDRESS BYTE LOAD BYTE (EEPOT WRITE D5D4D3D2D1D0 101011 RELOAD BYTE (EEPOT PULSES INCREMENT/DECREMENT WIPER etc. Sample MAIN Code Listing Using Following Interface Routines PSEN Figure Typical connection between 80C31 X9241 (with A3A2A1A0 0000) AN20-2 Xicor 0090 0091 0000 0000 0003 0006 0007 0008 000B 000C 000F 0010 0013 80C31 MICROCONTROLLER ROUTINES MANIPULATING X9241 QUAD EEPOT XICOR INC. 1993 TEMP COUNT PULSES COMMAND ADDR_BYTE DATA_BYTE p1.0 p1.1 80C31 USED 80C31 USED SCRATCH REGISTER LOOP COUNTING REGISTER BITS X###### INSTRUCTION (I.E. 0,4,8,12,16,.) BITS BITS BITS INSERT "JUMP MAIN" INSTRUCTION INTO 80C31 RESET VECTOR POSITION 0000h MAIN RESET VECTOR HANDLER THIS ADDRESS NAME: INTERPRET FUNCTION: DETERMINES WHICH X9241 INSTRUCTION ISSUED, THEN EXECUTES INPUTS: COMMAND OUTPUTS: NONE CALLS: READ WCR, READ_DR, WRITE_WCR, WRITE_DR, XFR_DR, XFR_WCR, GXFR_DR, GXFR_WCR,INC_WIPER AFFECTED: DPTR,A INTERPRET: dptr,#FIRST a,COMMAND @a+dptr BASE ADDRESS OFFSET JUMP INSTRUCTION HANDLER COMMAND FIRST: call READ_WCR call WRITE_WCR call READ_DR COMMAND COMMAND AN20-3 Xicor 0014 0017 0018 001B 001C 001F 0020 0023 0024 0027 0028 002B 002C 002D 002F 0030 call call call call call call WRITE_DR XFR_DR XFR_WCR GXFR_DR GXFR_WCR INC_WIPER COMMAND COMMAND COMMAND COMMAND COMMAND COMMAND FOLLOWING ROUTINES HANDLE EACH X9241 INSTRUCTIONS. THESE CALLED INTERPRET ROUTINE STRAIGHT FORWARD READ_WCR READS RETURNS ITS' VALUE DATA_BYTE WRITE_WCR WRITES VALUE DATA_BYTE READ_DR READS DATA REGISTER RETURNS ITS' VALUE DATA_BYTE WRITE_DR WRITES VALUE DATA_BYTE DATA REGISTER XFR_DR TRANSFERS VALUE DATA REGISTER ITS' XFR_WCR TRANSFERS VALUE ITS' DATA REGISTERS GXFR_DR GLOBAL TRANSFER LIKE DATA REGISTERS THEIR WCRS GXFR_WCR GLOBAL TRANSFER WCRS THEIR LIKE DATA REGISTERS INC_WIPER SINGLE STEP INCREMENT/DECREMENT WIPER POSITION FUNCTION: APPENDS BITS P1,P0,R1,R0 APPROPRIATE INSTRUCTION CODE PASSES INSTRUCTION BYTE INSTRUCTION GENERATOR INPUTS: OUTPUTS: NONE CALLS: INSTR_GEN AFFECTED: ID,A,DPTR READ_WCR: a,ID a,#090h ID,a dptr,#CASE1 BITS APPEND READ_WCR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION AN20-4 Xicor 0033 0036 0037 0038 call call INSTR_GEN a,ID a,#0A0h ID,a dptr,#CASE2 INSTR_GEN a,ID a,#0B0h ID,a dptr,#CASE1 WRITE_WCR: 003A 003B 003E 0041 0042 0043 BITS APPEND WRITE_WCR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION READ_DR: 0045 0046 0049 004C 004D 004E BITS APPEND READ_DR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION WRITE_DR: call INSTR_GEN a,ID a,#0C0h dptr,#CASE3 0050 0051 0054 0057 0058 0059 005B 005C 005F 0062 0063 0064 BITS APPEND WRITE_DR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION call INSTR_GEN XFR_DR: a,ID a,#0D0h dptr,#CASE4 BITS APPEND XFR_DR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION XFR_WCR: call INSTR_GEN a,ID a,#0E0h dptr,#CASE5 0066 0067 006A 006D 006E 006F BITS APPEND XFR_WCR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION GXFR_DR: call INSTR_GEN a,ID a,#010h dptr,#CASE4 0071 0072 0075 0078 0079 007A BITS APPEND GXFR_DR INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION GXFR_WCR: call INSTR_GEN a,ID a,#080h BITS APPEND GXFR_WCR AN20-5 Xicor 007C 007D 0080 0083 0084 0085 008F 0092 0093 0096 0097 009A 009B 009C 009D 009F 00A0 00A1 00A3 00A6 [00A3] 00A8 dptr,#CASE5 INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION INC_WIPER: call INSTR_GEN a,ID a,#020h ID,a dptr,#CASE6 0087 0088 008B 008E BITS APPEND INC_WIPER INSTRUCTION CODE SAVE RESULT BASE ADDRESS THIS INSTRUCTION call INSTR_GEN NAME: INSTR_GEN (INSTRUCTION GENERATOR) FUNCTION: ISSUES APPROPRIATE PROTOCOL EACH X9241 INSTRUCTION INPUTS: OUTPUTS: DATA_BYTE CALLS: START_COND, STOP_COND, SEND_BYTE, SEND_BIT, GET_BYTE, POLLING AFFECTED: DATA_BYTE,A,COUNT INSTR_GEN: call START_COND a,ADDR_BYTE call SEND_BYTE a,ID call SEND_BYTE CASE6: +dptr a,PULSES a,#00111111b COUNT, a,PULSES a,#10000000b ISSUE START CONDITION SEND X9241 ADDRESS BYTE SEND X9241 INSTRUCTION BYTE OFFSET (DON'T NEED OFFSET) JUMP VARIOUS INSTRUCTION CASES BITS BITS SAVE NUMBER PULSES BITS WIPER_LOOP: call SEND_BIT SEND SINGLE PULSE) djnz COUNT,WIPER_LOOP CONTINUE UNTIL PULSES SENT CASE4: STOP_GEN PROGRAM GETS HERE, AN20-6 Xicor 00AB 00AC 00AF 00B2 00B5 00B8 00B9 00BC 00BF 00C2 00C5 00C8 00CB 00CE 00CF 00D1 00D2 00D3 00D5 00D8 00D9 00DA 00DB [00D2] 00DD 00E0 CASE2: call call call call call call call call a,DATA_BYTE SEND_BYTE STOP_GEN GET_BYTE STOP_GEN a,DATA_BYTE SEND_BYTE STOP_COND POLLING STOP_GEN STOP_COND POLLING STOP_COND THEN IT'S DONE SEND X9241 DATA BYTE CASE1: CASE3: RECEIVE X9241 DATA BYTE SEND X9241 DATA BYTE ISSUE STOP CONDITION BEGIN ACKNOWLEDGE POLLING ISSUE STOP CONDITION BEGIN ACKNOWLEDGE POLLING TRANSMISSION OVER! CASE5: STOP_GEN: NAME: SEND_BYTE FUNCTION: SENDS BITS (FROM LSB) READS FROM INPUTS: OUTPUTS: NONE CALLS: SEND_BIT,GET_BIT AFFECTED: COUNT,TEMP,A SEND_BYTE: LOOP REPETITIONS TEMP,a STORE SHIFTED BYTE SHIFT) a,TEMP RETRIEVE LAST SAVED SHIFTED BYTE a,#10000000b MASK (MOST SIGNIFICANT BIT) call SEND_BIT PLACE THIS a,TEMP RETRIEVE LAST SAVED SHIFTED BYTE ROTATE BITS POSITION LEFT TEMP,a STORE THIS UPDATED SHIFTED BYTE djnz COUNT,BIT_LOOP call CLOCK WHEN DONE BITS, READ LINE COUNT,#8 BIT_LOOP: NEXT_BIT: AN20-7 Xicor 00E1 00E3 00E5 00E7 00EA [00E7] 00EB 00EC 00EE 00EF 00F0 00F1 00F3 00F5 NAME: SEND_BIT FUNCTION: PLACES INITIATES CLOCK PULSE INPUTS: OUTPUTS: NONE CALLS: CLOCK AFFECTED: SEND_BIT: setb SENT_ZERO: call SENT_ZERO CLOCK PULL SHOULD REALLY LOW? NOT, PULL HIGH INITIATE CLOCK PULSE NAME: CLOCK FUNCTION: ISSUES LOW-HIGH-LOW CLOCK PULSE SUFFICIENT DURATION READS DURING HIGH PHASE, JUST CASE IT'S NEEDED INPUTS: NONE OUTPUTS: CALLS: NONE AFFECTED: SCL,C CLOCK: setb c,SDA SET-UP PULL HIGH HOLD MOVE INTO CARRY FLAG PULL NAME: GET_BYTE FUNCTION: RECEIVES BITS FROM (MSB LSB) SENDS INPUTS: NONE OUTPUTS: DATA_BYTE CALLS: CLOCK,SEND_BIT AFFECTED: COUNT,SDA,A,DATA_BYTE AN20-8 Xicor 00F6 00F8 00FA [00EB] 00FC 00FD [00FA] 00FF 0100 0101 [00E1] 0103 0104 0106 0108 0109 010A 010B 010C 010E 010F 0110 0111 0112 0114 0115 0117 0119 GET_BYTE: setb RECEIVER SHOULDN'T DRIVE COUNT,#8 LOOP COUNTER REPETITIONS call CLOCK CLOCK CURRENT RECONSTRUCT BYTE USING LEFT SHIFTS djnz COUNT,GET_LOOP DATA_BYTE,a STORE RETRIEVED BYTE USER (SENDING call END_BIT SEND ACKNOWLEDGE GET_LOOP: NAME: START_COND (START CONDITION) FUNCTION: ISSUES START CONDITION INPUTS: NONE OUTPUTS: NONE CALLS: NONE AFFECTED: SDA,SCL START_COND: setb setb PULL HIGH ALLOW SET-UP PULL HIGH HOLD PULL (SCL=HIGH) HOLD COMPLETE CLOCK PULSE NAME: STOP_COND (STOP CONDITION) FUNCTION: ISSUES STOP CONDITION INPUTS: NONE OUTPUTS: NONE CALLS: NONE AFFECTED: SDA,SCL STOP_COND: setb PULL HOLD PULL HIGH HOLD AN20-9 Xicor 011A 011B 011C 011D 011F 0120 0121 [00E1] 0123 0124 [0104] 0126 0127 [00CF] 0129 [0124] 012B 012C setb PULL HIGH (SCL=HIGH) NAME: ACK_SEND (SEND ACKNOWLEDGE) FUNCTION: SENDS ACKNOWLEDGE COMPLETE LINE DATA READS INPUTS: NONE OUTPUTS: NONE CALLS: SEND_BIT AFFECTED: ACK_SEND: call SEND_BIT (SENDING SEND BIT! NAME: POLLING (ACKNOWLEDGE POLLING XFR_WCR, WRITE_DR, GXFR_WCR) FUNCTION: SENDS DUMMY COMMANDS X9241 DURING INTERNAL WRITE CYCLE THAT CYCLE MARKED ACKNOWLEDGE INPUTS: ADDR_BYTE OUTPUTS: NONE CALLS: START_COND,SEND_BYTE AFFECTED: POLLING: call START_COND a,ADDR_BYTE call SEND_BYTE POLLING MAIN PROGRAM HERE. MAIN: REESTABLISH PROTOCOL ATTEMPT SEND DUMMY COMMAND C=1, THEN THERE ACKNOWLEDGE AGAIN: ASSEMBLY END, ERRORS:0, LAST CODE ADDRESS:012BH, TOTAL BYTES:299 AN20-10 Other recent searchesTCO-787ZH - TCO-787ZH TCO-787ZH Datasheet SRA1020 - SRA1020 SRA1020 Datasheet SRA1060 - SRA1060 SRA1060 Datasheet SN74LV08A - SN74LV08A SN74LV08A Datasheet MK2771-13 - MK2771-13 MK2771-13 Datasheet MK2771-03 - MK2771-03 MK2771-03 Datasheet L6219DS - L6219DS L6219DS Datasheet IC62LV1008L - IC62LV1008L IC62LV1008L Datasheet IC62LV1008LL - IC62LV1008LL IC62LV1008LL Datasheet ADP1110 - ADP1110 ADP1110 Datasheet
Privacy Policy | Disclaimer |