Форум программистов, компьютерный форум CyberForum.ru
С наступающим Новым годом!
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
romanos26
Гость
Сообщений: n/a
25.05.2013, 12:56     Нарисовать блок-схему по коду на Assembler   #1
Отблагодарю реально! ICQ 404249673


PIC16F628A
Программа для управления асинхронным двигателем.
Код ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
Листинг программы контроллера
 
;***************************************
 ;               file name: ZADACHA
 ;                 
 ;       Тактовая частота  20 MHz   
 ;***************************************  
              #include <P16F628.inc>
               list p=16F628 
 ;*************************************** 
 ;       Установка конфигурации               
   __CONFIG_PWRTE_ON & _WDT_OFF &_HS_OSC_CP_OFF_BOD_ON  
 ;***************************************
                 ;Описание констант
    T0IF                       equ     2             ;флаг прерывания от TMR0
    TMR1IF                 equ     0            ;флаг прерывания от tmr1 в рег pir1 
    c                              equ     0             ;бит переноса заема
    z                             equ     2
    TMR1ON               equ     0            ;бит разрешения работы таймера TMR1
    TMR1IE                 equ     0            ;бит разрешения прерываеия от TMR1                                
    T0IE                       equ     5             ;разрешение прерываний от TMR0   
    FL1                         equ     1            ;свой флаг от кнопки СТОП 
    FL2                         equ     2            ;свой флаг от кнопки     +
    FL3                        equ      3             ;свой флаг от кнопки     -
    FL0                        equ      0             ;свой флаг от кнопки  ПУСК
    FL4                        equ      4             ;свой флаг для смены разряда индикации
    FL5                        equ     5              ;свой флаг для включения динамического торможения
    FL6                        equ     6             ;свой флаг пуска двигателя
    FL7                        equ     7
    B1                         equ     1
    B2                         equ     2
    B3                         equ     3
    B4                         equ     4
    B5                         equ     5
    GIE                       equ     7              ;глобальное запрещние прерываний 
    RP0                      equ     5               ;выбор банка паяти
    PEIE                    equ     6                ;прерывания от переферийных модулей
    KL0                     equ     0
    KL1                     equ     1
    KL2                     equ     2
   
 
    KL3                     equ     3
    K4                       equ     4
    vren                     equ     7
    BL                       equ     7       
    BH                       equ     6
    L                          equ     7 
    H                          equ     6
    TRISA                  equ      0x85 
    TRISB                  equ      0x86
    PORTA                equ      0x05
    PORTB                equ      0x06
    vrcon                    equ      0x9f
    intcon                   equ      0x0b
    option_reg            equ      0x81
    status                    equ      0x03  
    t1con                    equ      0x10 
    pir1                      equ      0x0c
    pie1                      equ      0x8c
    tmr1l                    equ      0x0e
    tmr1h                   equ      0x0f
    tmr0                     equ      0x01 
    cmcon                  equ      0x1f
    w_temp                equ      0x20                
    status_temp          equ      0x21
    flag                       equ      0x22
    flags                      equ      0x23
     Nstup                   equ      0x25
    Nstep                   equ      0x24
    BinH                    equ      0x26
    BinL                    equ      0x27
    Con0                    equ      0x28
    Con1L                 equ      0x29
    Con1H                equ      0x2A
    counter               equ      0x2B
    temp                   equ      0x2C
    Xstep                  equ      0x2D
    count1                equ      0x2E
    count2                equ      0x2F
 ;************************************
  org 0x00                                ;вектор сброса
  goto  START
;***********************************  
  org 0x04                                    ;вектор прерывания
 
 
       movwf      w_temp
       bcf             intcon,GIE         ;запрет прерываний
       bcf             intcon,PEIE        ;запрет прерываний от перефер модулей
       bcf             intcon,T0IE        ;запрещаю прерывания от TMR0
       bsf             status,RP0 
       bcf             pie1,TMR1IE       ;запрещаю прерывание от TMR1
       bcf            status,RP0 
       btfss          intcon,T0IF            ;было прерывание от TMR0
       goto               tr1                        ;нет  
       bcf                 intcon,T0IF         ;да иду на индикацию и клаву
       decfsz            counter
       goto               p3                        ;без опроса клавы идем на ИНДИКАЦИЮ
       nop                                            ;ноль
       movlw           b'01100100'          
       movwf           counter 
       clrf                PORTA               ;ОПРОС КЛАВЫ
       bsf                 PORTA,KL0      ;опрос клавиши ПУСК 
       nop
       btfss              PORTA,K4
       goto               k3                       ;0 не нежата
       btfss              flag,FL0              ;1 нажата
       goto               k1                       ;0  не была нажата
       bsf                flag,FL5              ;1 была нажата
k3   bcf                flag,FL0
       bcf                PORTA,KL0
       goto              k2                         ;закончили опрос кнопки ПУСК
k1   bsf                flag,FL0
       bcf                PORTA,KL0       ;закончили опрос кнопки ПУСК 
k2   bsf                PORTA,KL1        ;опрос клавиши СТОП 
       nop
       btfss              PORTA,K4
       goto               k4                         ;0 не нежата
       btfss              flag,FL1               ;1 нажата
       goto               k5                         ;0  не была нажата
       bsf                 flag,FL4               ;1 была нажата
k4   bcf                flag,FL1
       bcf                PORTA,KL0
       goto              k7                           ;закончили опрос кнопки СТОП
k5   bsf                flag,FL1
       bcf                PORTA,KL1          ;закончили опрос кнопки СТОП 
k7   bsf                 PORTA,KL2         ;опрос клавиши + 
       nop
       btfss              PORTA,K4
 
 
       goto               k11                           ;0 не нежата
       btfss              flag,FL2                    ;1 нажата
       goto               k6                             ;0  не была нажата
       bsf                 flag,FL6                   ;1 была нажата
k11 bcf                 flag,FL2
       bcf                 PORTA,KL2
       goto               k8                             ;закончили опрос кнопки +
k6   bsf                 flag,FL2
       bcf                 PORTA,KL2           ;закончили опрос кнопки +
k8   bsf                 PORTA,KL3            ;опрос клавиши - 
        nop                           
        btfss                  PORTA,K4              
        goto                  k9                       ;0 не нежата
        btfss                  flag,FL3             ;1 нажата
        goto                   k10                    ;0 не была нажата
        bsf                    flag,FL7             ;1 была нажата
k9    bcf                    flag,FL3             
        bcf                    PORTA,KL3            
        goto                  p2                        ;закончили опрос кнопки -
k10  bsf                    flag,FL3              
        bcf                    PORTA,KL3        ;закончили опрос кнопки -  
p2    btfss                 flag,FL6                ;проверка флагов + и -     
        goto                 p3         
        btfss                 flag,FL7    
        goto                  p3           
        bcf                    flag,FL6      
        bcf                    flag,FL7      
 p3   btfss                 flags,FL4             ;ИНДИКАЦИЯ
        goto                   p1                       ;0 индицируем младший разряд
        bcf                    flags,FL4             ;1 индицируем старший разряд
        bsf                    PORTB,BL         
        bcf                     PORTB,BH         ;включили старший разряд 
        movf                  BinH,w              
        movwf               PORTA              ;значение для индикатора
        goto                   out0                
  p1  bsf                      flags,FL4        
        bsf                      PORTB,BH          
        bcf                      PORTB,BL         ;включили младший разряд
        movf                   BinL,w         
        movwf                PORTA               ;значение для индикатора
        btfss                   flag,FL6               ;ОБРАБОТКА КНОПОК + И -
        goto                    p4                        ;0 нет переход на опрос кнопки -
        bcf                      flag,FL6              ;1 нажата кнопка + 
 
                
        movf                   Nstup,w    
        btfss                    status,z
        goto                     p7                       
        goto                     p6                        ;Nstup=0  
p7    movlw                 b'00001011'                  
         movwf               temp 
         movf                  Nstup,w
         subwf                 temp,w
        btfsc                    status,z
        goto                     out0                      ;1 не увеличиваем
p6    incf                      Nstup                   ;0 увеличиваем скорость
        movf                    Nstup,w
       call                       ind
       movwf                 BinL
       movwf                 temp
       swapf                   temp
        movf                    temp,w
        movwf                 BinH
        movf                    Nstup,w
        call                       constH    
        movwf                 Con1H
        movf                    Nstup,w
        call                       constL
         movwf                 Con1L
        goto                     out0   
p4    btfss                     flag,FL7
         goto                      out0         
         bcf                        flag,FL7   
          movf                     Nstup,w              ;проверяем Nstup=0
         btfss                      status,z
         goto                      p8          
         goto                      out0                     ;Nstup=0          
p8     movlw                  b'00000001'
         subwf                   Nstup,w
         btfss                     status,z
         goto                     p5          
         goto                     out0                      ;Nstup=1
p5     decf                      Nstup
          movf                     Nstup,w
          call                        ind
           movwf                  BinL
          movwf                  temp
          swapf                    temp
 
 
           movf                      temp,w
           movwf                   BinH
           movf                      Nstup,w
          call                        constH    
          movwf                  Con1H
          movf                     Nstup,w
          call                        constL
          movwf                   Con1L
out0   movlw                   b'00111101'       ;10 mS для индикации
          movwf                    Con0
out     bsf                           intcon,PEIE      ;разрешение прерываний от перефер модулей
           bsf                          intcon,T0IE      ;разрешаю прерывания от TMR0
           bsf                          status,RP0 
           bsf                            pie1,TMR1IE       ;разрешаю прерывание от TMR1
           bcf                           status,RP0 
           bsf                            t1con,TMR1ON     ;включим TMR1
           movf     w_temp,w        
           retfie    
;************************************ 
;подпрограмма  отображения индикации
;************************************
 ind  addwf     PCL,f 
     nop
     retlw     b'00010000' ;10
     retlw     b'00010101' ;15
     retlw     b'00100000' ;20
     retlw     b'00100101' ;25
     retlw     b'00110000' ;30
     retlw     b'00110101' ;35
     retlw     b'01000000' ;40
     retlw     b'01000101' ;45
     retlw     b'01010000' ;50
     retlw     b'01010101' ;55
     retlw     b'01100000' ;60 
;************************************
;подпрограмма  выбора времени шага в 
;зависимости от ступени разгона дляTMR1H
;************************************
constH  addwf     PCL,f 
     nop
     retlw  b'11110101'  ;  10 Гц  
     retlw  b'11111001'  ;  15
 
 
     retlw  b'11111010'  ;  20
     retlw  b'11111011'  ;  25
     retlw  b'11111100'  ;  30
     retlw  b'11111101'  ;  35
     retlw  b'11111101'  ;  40
     retlw  b'11111101'  ;  45
     retlw  b'11111101'  ;  50
     retlw  b'11111110'  ;  55
     retlw  b'11111110'  ;  60
;************************************
;подпрограмма  выбора времени шага в 
;зависимости от ступени разгона дляTMR1L
;************************************
constL  addwf     PCL,f 
     nop
     retlw  b'11010100'  ;  10 Гц  
     retlw  b'01001001'  ;  15
     retlw  b'11101100'  ;  20
     retlw  b'11110010'  ;  25
     retlw  b'10100100'  ;  30
     retlw  b'00011010'  ;  35
     retlw  b'01110101'  ;  40
     retlw  b'10111110'  ;  45
     retlw  b'11110111'  ;  50
     retlw  b'00101000'  ;  55
     retlw  b'01001111'  ;  60 
;************************************
tr1 btfss              pir1,TMR1IF
      goto              out         
      bcf                pir1,TMR1IF    ;прерывание от TMR1
      movf             Nstup,w            ;проверяем Nstup=0
      btfsc              status,z
      goto               t4                      ;нулевой результат
      btfss              flags,FL5
      goto               t4       
      movlw            b'00011000'      ;проверяем номер шага                 
      movwf           temp   
      movf             Nstep,w
      subwf            temp,w
      btfsc              status,z
      goto                t2                        ;Nstep=24
      incf                Nstep                    ;нет
t5  movf               Nstep,w
 
 
     call                  step
     movwf            Xstep
     btfsc                PORTB,BH
     goto                t3           
     bsf                   Xstep,L         
     bcf                  Xstep,H        
     movf               Xstep,w
     movwf            PORTB
     goto                 t4
t2 movlw              b'00000001'
     movwf             Nstep
     goto                 t5
t3  bcf                   Xstep,L         
     bsf                    Xstep,H        
     movf                 Xstep,w
     movwf              PORTB
t4  clrf                   tmr1l
      movf               Con1H,w          ;установим TMR1
          movwf            tmr1h
          movf               Con1L,w
          movwf             tmr1l
          goto                 out
;************************************
;подпрограмма  выбора шага        bsf  PORTB,B0
;************************************
step  addwf     PCL,f 
         nop
     retlw     b'00011000' 
     retlw     b'00011000' 
     retlw     b'00001001' 
     retlw     b'00001001' 
     retlw     b'00001001' 
     retlw     b'00001001' 
     retlw     b'00100001' 
     retlw     b'00100001' 
     retlw     b'00100001' 
     retlw     b'00100001' ;10
     retlw     b'00100100' 
     retlw     b'00100100' 
     retlw     b'00100100' 
     retlw     b'00100100' 
     retlw     b'00000110' 
     retlw     b'00000110' 
     retlw     b'00000110' 
     retlw     b'00000110' 
     retlw     b'00010010' 
     retlw     b'00010010' ;20 
     retlw     b'00010010' 
     retlw     b'00010010' 
     retlw     b'00011000' 
     retlw     b'00011000' 
;************************************
;начальная инициализация
;************************************
 START      bsf           status,RP0                      ;выбрали 1-й банк
                   movlw     b'11110000'                
                   movwf     TRISA                                    
                   movlw     b'00000000'  
                   movwf     TRISB 
                   movlw     b'11000111'
                   movwf     option_reg                      
                   movlw     b'00000001'
                   movwf     pie1                                   
                  bcf           status,RP0                       ;выбрали 0-й банк
                  movlw     b'00000000'                
                  movwf     cmcon
                  movlw     b'00011111'                
                  movwf     PORTA
                  movlw     b'11000000'                
                  movwf     PORTB
                  movlw     b'00000000'  
                  movwf     intcon
                  movlw     b'00010000' 
                  movwf     pir1
                  movlw     b'00110100'
                  movwf     t1con
 f4                    movlw     b'00000000' 
                       movwf     flag
                       movwf     flags
                       movwf     Nstep
                       movwf     Nstup
                       movwf     Xstep
                       movwf     BinH
                       movwf     BinL
                       movwf     Con1L
                       movwf     Con1H
                       movwf     tmr1l
                       movwf     tmr1h
 
 
                       movlw     b'00111101'               ;10 mS для индикации
                       movwf     Con0
;************************************
; работа двигателя
;************************************
                        bcf                flags,FL4
                         movlw          b'00000000'
                         movwf          BinH
                         movlw           b'00000000' 
                          movwf          BinL              ;в ожидании пуска высвечиваю 00 Гц
                         movlw           b'11100000'  
                         movwf           intcon           ;разрешаю прерывания от TMR0
                         movf              Con0,w
                         movwf           tmr0
                         movlw           b'01100100'  ;выставляю время опроса клавиатуры        
                         movwf           counter 
f1          movf         Nstup,w    
              btfss          status,z
              goto          f2              ;Nstup=/0
               bcf            flag,FL5      ;1 Nstup=0
               bcf            flags,FL5
               goto          f1              
 f2           btfss         flag,FL5
               goto          f2    
               bcf            flag,FL5 
               bsf            flags,FL5
;************************************      
;программа модуляции 1кГц
;************************************
              bcf             flags,FL3
m3          movlw      b'00001111'  
               movwf     count1
               movlw     b'11111111'
               movwf     count2
m1          decfsz      count2
               goto          m1
               movlw      b'11111111'
               movwf     count2
               decfsz      count1
               goto          m1
               btfss         flag,FL4           ;ТОРМРЖЕНИЕ
               goto          m2                   ;НЕТ
               bcf            flags,FL5         ;ДА
 
 
               bcf            flag,FL4
               bcf            flag,FL5
               clrf            Nstup
               clrf            PORTB
               goto           f4
m2          btfss          flags,FL3        ;задать высокий или низкий уровень 
               goto           m4                  ;0 задам низкий уровень
                bcf            flags,FL3       ;1 задам высокий уровень
                goto           m3
m4           bsf             flags,FL3
                 bcf            PORTB,B0
                 bcf            PORTB,B1
                 bcf            PORTB,B2
                 bcf             PORTB,B3
                 bcf             PORTB,B4
                 bcf             PORTB,B5
                 goto           m3
end
Добавлено через 1 час 1 минуту
1000 рублей отдам
AdAgent
Объявления
25.05.2013, 12:56     Нарисовать блок-схему по коду на Assembler
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 12:56     Нарисовать блок-схему по коду на Assembler
Посмотрите здесь:

Написать программу и нарисовать блок-схему
Нарисовать блок-схему
Нарисовать блок-схему к программе на си
нужно нарисовать блок-схему или псевдокод!
Составить алгоритм и нарисовать блок-схему для вычисления функции (Basic)
Нарисовать блок схему
Нарисовать блок-схему
Pascal TURBO Pascal Составить блок-схему по коду

Искать еще темы с ответами

Поиск по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 12:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика