auto_pwm.rmh
来自「和picoblaze完全兼容的mcu ip core」· RMH 代码 · 共 884 行 · 第 1/3 页
RMH
884 行
// #103: CONSTANT(character_d,100)// #104: CONSTANT(character_e,101)// #105: CONSTANT(character_f,102)// #106: CONSTANT(character_g,103)// #107: CONSTANT(character_h,104)// #108: CONSTANT(character_i,105)// #109: CONSTANT(character_j,106)// #110: CONSTANT(character_k,107)// #111: CONSTANT(character_l,108)// #112: CONSTANT(character_m,109)// #113: CONSTANT(character_n,110)// #114: CONSTANT(character_o,111)// #115: CONSTANT(character_p,112)// #116: CONSTANT(character_q,113)// #117: CONSTANT(character_r,114)// #118: CONSTANT(character_s,115)// #119: CONSTANT(character_t,116)// #120: CONSTANT(character_u,117)// #121: CONSTANT(character_v,118)// #122: CONSTANT(character_w,119)// #123: CONSTANT(character_x,120)// #124: CONSTANT(character_y,121)// #125: CONSTANT(character_z,122)// #126: CONSTANT(character_A,65)// #127: CONSTANT(character_B,66)// #128: CONSTANT(character_C,67)// #129: CONSTANT(character_D,68)// #130: CONSTANT(character_E,69)// #131: CONSTANT(character_F,70)// #132: CONSTANT(character_G,71)// #133: CONSTANT(character_H,72)// #134: CONSTANT(character_I,73)// #135: CONSTANT(character_J,74)// #136: CONSTANT(character_K,75)// #137: CONSTANT(character_L,76)// #138: CONSTANT(character_M,77)// #139: CONSTANT(character_N,78)// #140: CONSTANT(character_O,79)// #141: CONSTANT(character_P,80)// #142: CONSTANT(character_Q,81)// #143: CONSTANT(character_R,82)// #144: CONSTANT(character_S,83)// #145: CONSTANT(character_T,84)// #146: CONSTANT(character_U,85)// #147: CONSTANT(character_V,86)// #148: CONSTANT(character_W,87)// #149: CONSTANT(character_X,88)// #150: CONSTANT(character_Y,89)// #151: CONSTANT(character_Z,90)// #152: CONSTANT(character_0,48)// #153: CONSTANT(character_1,49)// #154: CONSTANT(character_2,50)// #155: CONSTANT(character_3,51)// #156: CONSTANT(character_4,52)// #157: CONSTANT(character_5,53)// #158: CONSTANT(character_6,54)// #159: CONSTANT(character_7,55)// #160: CONSTANT(character_8,56)// #161: CONSTANT(character_9,57)// #162: CONSTANT(character_colon,58)// #163: CONSTANT(character_stop,46)// #164: CONSTANT(character_semi_colon,59)// #165: CONSTANT(character_minus,45)// #166: CONSTANT(character_divide,47) ;'/'// #167: CONSTANT(character_plus,43)// #168: CONSTANT(character_comma,44)// #169: CONSTANT(character_less_than,60)// #170: CONSTANT(character_greater_than,62)// #171: CONSTANT(character_equals,61)// #172: CONSTANT(character_space,32)// #173: CONSTANT(character_CR,13) ;carriage return// #174: CONSTANT(character_question,63) ;'?'// #175: CONSTANT(character_dollar,36)// #176: CONSTANT(character_exclaim,33) ;'!'// #177: CONSTANT(character_BS,8) ;Back Space command character// #178: ;// #179: ;// #180: ;// #181: ;// #182: ;// #183: ;**************************************************************************************// #184: ;Initialise the system// #185: ;**************************************************************************************// #186: ;// #187: ; All PWM channels initialise to off (zero).// #188: ; Simple I/O outputs will remain off at all times.// #189: ;// @000 #190: [cold_start]00000 // @000 #190: LOAD(s0,0)00101 // @001 #191: LOAD(s1,PWM_channel0)// @002 #192: [clear_loop]2f010 // @002 #192: STORE(s0,s1)1410c // @003 #193: COMPARE(s1,PWM_channel11)35007 // @004 #194: JUMP(Z,enable_int)18101 // @005 #195: ADD(s1,1)34002 // @006 #196: JUMP(clear_loop)// #197: ;// @007 #198: [enable_int]3c001 // @007 #198: ENABLE(INTERRUPT) ;interrupts used to drive servo// #199: ;300c7 // @008 #200: CALL(send_welcome) ;Write welcome message to UART300fb // @009 #201: CALL(send_OK)// #202: ;// #203: ;// #204: ; Initialise LED pattern sequence// #205: ;00001 // @00a #206: LOAD(s0,1) ;trigger to start wave pattern2e010 // @00b #207: STORE(s0,LED0_sequence)00000 // @00c #208: LOAD(s0,0)2e011 // @00d #209: STORE(s0,LED1_sequence)2e012 // @00e #210: STORE(s0,LED2_sequence)2e013 // @00f #211: STORE(s0,LED3_sequence)2e014 // @010 #212: STORE(s0,LED4_sequence)2e015 // @011 #213: STORE(s0,LED5_sequence)2e016 // @012 #214: STORE(s0,LED6_sequence)2e017 // @013 #215: STORE(s0,LED7_sequence)// #216: ;// #217: ;**************************************************************************************// #218: ; Main program// #219: ;**************************************************************************************// #220: ;// #221: ; Provides a pattern of interest on the LEDs :-)// #222: ;// #223: ; Each LED increases intensity in 8 steps and then decreases intensity in 8 steps until it is off.// #224: ; The middle LEDs (LD2 to LD5) each start to turn on when either neighbour is turned half on and increasing// #225: ; to provide the effect of a passing a 'wave' of light passing from side to side. The pair of LEDs at each// #226: ; (LD0, Ld1 and LD6, LD7) are required to reflect the 'wave' so that the pattern continues.// #227: ;// #228: ; I'm sure this code cold be written in more elegant way, but I leave that as an exercise to you :-)// #229: ;// @014 #230: [warm_start]00203 // @014 #230: LOAD(s2,3) ;simple delay loop (time will be increased by ISR processing)// @015 #231: [delay_s2_loop]001ff // @015 #231: LOAD(s1,FF)// @016 #232: [delay_s1_loop]000ff // @016 #232: LOAD(s0,FF)// @017 #233: [delay_s0_loop]1c001 // @017 #233: SUB(s0,1)35c17 // @018 #234: JUMP(NC,delay_s0_loop)1c101 // @019 #235: SUB(s1,1)35c16 // @01a #236: JUMP(NC,delay_s1_loop)1c201 // @01b #237: SUB(s2,1)35c15 // @01c #238: JUMP(NC,delay_s2_loop)// #239: ;// #240: ;Pattern generation// #241: ;06010 // @01d #242: FETCH(s0,LED0_sequence) ;read sequence for LED014000 // @01e #243: COMPARE(s0,0)35025 // @01f #244: JUMP(Z,test_LED0_start)1c020 // @020 #245: SUB(s0,32) ;Count longer to ensure end stops then reset count if maximum35028 // @021 #246: JUMP(Z,update_LED0)18020 // @022 #247: ADD(s0,32)// @023 #248: [inc_LED0]18001 // @023 #248: ADD(s0,1) ;increment counter34028 // @024 #249: JUMP(update_LED0)// @025 #250: [test_LED0_start]06111 // @025 #250: FETCH(s1,LED1_sequence) ;start LED0 if LED1 = 414104 // @026 #251: COMPARE(s1,4)35023 // @027 #252: JUMP(Z,inc_LED0)// @028 #253: [update_LED0]2e010 // @028 #253: STORE(s0,LED0_sequence)300a7 // @029 #254: CALL(LED_to_duty)2e101 // @02a #255: STORE(s1,PWM_channel0)// #256: ;06110 // @02b #257: FETCH(s1,LED0_sequence) ; refresh LED1 if LED0 = 11 (0B hex) to reflect wave1410b // @02c #258: COMPARE(s1,11)35430 // @02d #259: JUMP(NZ,normal_LED1)00004 // @02e #260: LOAD(s0,4)3403e // @02f #261: JUMP(update_LED1)// @030 #262: [normal_LED1]06011 // @030 #262: FETCH(s0,LED1_sequence) ;read sequence for LED114000 // @031 #263: COMPARE(s0,0)35038 // @032 #264: JUMP(Z,test_LED1_start)1c010 // @033 #265: SUB(s0,16) ;reset count if maximum3503e // @034 #266: JUMP(Z,update_LED1)18010 // @035 #267: ADD(s0,16)// @036 #268: [inc_LED1]18001 // @036 #268: ADD(s0,1) ;increment counter3403e // @037 #269: JUMP(update_LED1)// @038 #270: [test_LED1_start]06110 // @038 #270: FETCH(s1,LED0_sequence) ;start LED1 if LED0 = 11 (0B hex) to reflect wave1410b // @039 #271: COMPARE(s1,11)35036 // @03a #272: JUMP(Z,inc_LED1)06112 // @03b #273: FETCH(s1,LED2_sequence) ;start LED1 if LED2 = 414104 // @03c #274: COMPARE(s1,4)35036 // @03d #275: JUMP(Z,inc_LED1)// @03e #276: [update_LED1]2e011 // @03e #276: STORE(s0,LED1_sequence)300a7 // @03f #277: CALL(LED_to_duty)2e102 // @040 #278: STORE(s1,PWM_channel1)// #279: ;06012 // @041 #280: FETCH(s0,LED2_sequence) ;read sequence for LED214000 // @042 #281: COMPARE(s0,0)35049 // @043 #282: JUMP(Z,test_LED2_start)1c010 // @044 #283: SUB(s0,16) ;reset count if maximum3504f // @045 #284: JUMP(Z,update_LED2)18010 // @046 #285: ADD(s0,16)// @047 #286: [inc_LED2]18001 // @047 #286: ADD(s0,1) ;increment counter3404f // @048 #287: JUMP(update_LED2)// @049 #288: [test_LED2_start]06111 // @049 #288: FETCH(s1,LED1_sequence) ;start LED2 if LED1 = 414104 // @04a #289: COMPARE(s1,4)35047 // @04b #290: JUMP(Z,inc_LED2)06113 // @04c #291: FETCH(s1,LED3_sequence) ;start LED2 if LED3 = 414104 // @04d #292: COMPARE(s1,4)35047 // @04e #293: JUMP(Z,inc_LED2)// @04f #294: [update_LED2]2e012 // @04f #294: STORE(s0,LED2_sequence)300a7 // @050 #295: CALL(LED_to_duty)2e103 // @051 #296: STORE(s1,PWM_channel2)// #297: ;// #298: ;06013 // @052 #299: FETCH(s0,LED3_sequence) ;read sequence for LED314000 // @053 #300: COMPARE(s0,0)3505a // @054 #301: JUMP(Z,test_LED3_start)1c010 // @055 #302: SUB(s0,16) ;reset count if maximum35060 // @056 #303: JUMP(Z,update_LED3)18010 // @057 #304: ADD(s0,16)// @058 #305: [inc_LED3]18001 // @058 #305: ADD(s0,1) ;increment counter34060 // @059 #306: JUMP(update_LED3)// @05a #307: [test_LED3_start]06112 // @05a #307: FETCH(s1,LED2_sequence) ;start LED3 if LED2 = 414104 // @05b #308: COMPARE(s1,4)35058 // @05c #309: JUMP(Z,inc_LED3)06114 // @05d #310: FETCH(s1,LED4_sequence) ;start LED3 if LED4 = 414104 // @05e #311: COMPARE(s1,4)35058 // @05f #312: JUMP(Z,inc_LED3)// @060 #313: [update_LED3]2e013 // @060 #313: STORE(s0,LED3_sequence)300a7 // @061 #314: CALL(LED_to_duty)2e104 // @062 #315: STORE(s1,PWM_channel3)// #316: ;06014 // @063 #317: FETCH(s0,LED4_sequence) ;read sequence for LED414000 // @064 #318: COMPARE(s0,0)3506b // @065 #319: JUMP(Z,test_LED4_start)1c010 // @066 #320: SUB(s0,16) ;reset count if maximum35071 // @067 #321: JUMP(Z,update_LED4)18010 // @068 #322: ADD(s0,16)// @069 #323: [inc_LED4]18001 // @069 #323: ADD(s0,1) ;increment counter34071 // @06a #324: JUMP(update_LED4)// @06b #325: [test_LED4_start]06113 // @06b #325: FETCH(s1,LED3_sequence) ;start LED4 if LED3 = 414104 // @06c #326: COMPARE(s1,4)35069 // @06d #327: JUMP(Z,inc_LED4)06115 // @06e #328: FETCH(s1,LED5_sequence) ;start LED4 if LED5 = 414104 // @06f #329: COMPARE(s1,4)35069 // @070 #330: JUMP(Z,inc_LED4)// @071 #331: [update_LED4]2e014 // @071 #331: STORE(s0,LED4_sequence)300a7 // @072 #332: CALL(LED_to_duty)2e105 // @073 #333: STORE(s1,PWM_channel4)// #334: ;06015 // @074 #335: FETCH(s0,LED5_sequence) ;read sequence for LED514000 // @075 #336: COMPARE(s0,0)3507c // @076 #337: JUMP(Z,test_LED5_start)1c010 // @077 #338: SUB(s0,16) ;reset count if maximum35082 // @078 #339: JUMP(Z,update_LED5)18010 // @079 #340: ADD(s0,16)// @07a #341: [inc_LED5]18001 // @07a #341: ADD(s0,1) ;increment counter34082 // @07b #342: JUMP(update_LED5)// @07c #343: [test_LED5_start]06114 // @07c #343: FETCH(s1,LED4_sequence) ;start LED5 if LED4 = 414104 // @07d #344: COMPARE(s1,4)3507a // @07e #345: JUMP(Z,inc_LED5)06116 // @07f #346: FETCH(s1,LED6_sequence) ;start LED5 if LED6 = 414104 // @080 #347: COMPARE(s1,4)3507a // @081 #348: JUMP(Z,inc_LED5)// @082 #349: [update_LED5]2e015 // @082 #349: STORE(s0,LED5_sequence)300a7 // @083 #350: CALL(LED_to_duty)2e106 // @084 #351: STORE(s1,PWM_channel5)// #352: ;06117 // @085 #353: FETCH(s1,LED7_sequence) ; refresh LED6 if LED7 = 11 (0B hex) to reflect wave1410b // @086 #354: COMPARE(s1,11)3548a // @087 #355: JUMP(NZ,normal_LED6)00004 // @088 #356: LOAD(s0,4)34095 // @089 #357: JUMP(update_LED6)// @08a #358: [normal_LED6]06016 // @08a #358: FETCH(s0,LED6_sequence) ;read sequence for LED614000 // @08b #359: COMPARE(s0,0)35092 // @08c #360: JUMP(Z,test_LED6_start)1c010 // @08d #361: SUB(s0,16) ;reset count if maximum35095 // @08e #362: JUMP(Z,update_LED6)18010 // @08f #363: ADD(s0,16)// @090 #364: [inc_LED6]18001 // @090 #364: ADD(s0,1) ;increment counter34095 // @091 #365: JUMP(update_LED6)// @092 #366: [test_LED6_start]06115 // @092 #366: FETCH(s1,LED5_sequence) ;start LED6 if LED5 = 414104 // @093 #367: COMPARE(s1,4)35090 // @094 #368: JUMP(Z,inc_LED6)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?