Главная | | | Прайс-лист | | | FAQ | | | Обмен опытом | | | Контакты | | | Новости | | | DOWNLOAD | | | | Добавить в избранное | Назад |
Комплект модулей MCU4 [MCU32-4 ]
| Конвертеры интерфейсов [RSX8-3.3 DIN ]
| Узлы автоматики [MCX53-21.21 ] |
Разделы:
| ;Filename: out9.asm; ;Date: 11.02.2005; ;File Version: 1.02; ;Author: Bazhenov V. A.; ;Company: Fractal LTD.; ;*********************************; ;*********************************; ;Files required: P18F252.INC; ;*********************************; LIST P=18F252, F=INHX32 ;directive to define processor and file format #include <P18F252.INC> ;processor specific variable definitions COUNT EQU 0x00;счетчик посещения прерывания 100 Гц STEP_1_H EQU 0x10 ;старший байт счетчика шагов (первый канал) STEP_1_L EQU 0x11 ;младший байт счетчика шагов (первый канал) CCL_1 EQU 0x12 ;состояние управляющих линий в режиме покоя (первый канал) CW_1 EQU 0x13 ;управляющее слово (первый канал) START_1 EQU 0x14 ;стартовый байт (первый канал) STEP_2_H EQU 0x20 ;старший байт счетчика шагов (второй канал) STEP_2_L EQU 0x21 ;младший байт счетчика шагов (второй канал) CCL_2 EQU 0x22 ;состояние управляющих линий в режиме покоя (второй канал) CW_2 EQU 0x23 ;управляющее слово (второй канал) START_2 EQU 0x24 ;стартовый байт (второй канал) START EQU 0x01 ;стартовый байт на оба канала I2C_DATA EQU 0x40 ;здесь будем хранить данные I2C_N EQU 0x58 ;число информационных байт в обмене I2C_SLAD EQU 0x5A ;Slave- адрес устройства REG_MODBUS EQU 0x053 ;служебный регистр резидентной программы ;REG_MODBUS<7>=1 идет прием телеграммы ;REG_MODBUS<6>=1 идет передача телеграммы ;REG_MODBUS<5>=1 телеграмма принята - готова к обработке ;REG_MODBUS<4>=1 контроллер готов к приему новой телеграммы ;REG_MODBUS<3>=1 v1.21 добавить к телеграмме CRC16,предать и получить ответ, проверить CRC16 ;REG_MODBUS<2>=1 совпадение циркулярного адреса ;REG_MODBUS<1>=1 совпадение ADR_MODBUS ;REG_MODBUS<0>=1 совпадение контрольной суммы (CRC) ORG 0x2000 ;REG_USER<7>=1 передать управление после завершения участка инициализации резидентной программы return ORG 0x2004 ;REG_USER<6>=1 передать управление перед завершением цикла MAIN резидентной программы goto 0x2200 ORG 0x2008 ;REG_USER<5>=1 передать управление после обработки прерывания с высоким приоритетом (TMR3 =10 000 Гц) return ORG 0x200C ;REG_USER<4>=1 передать управление после обработки прерывания с низким приоритетом (I2C, UART) return ORG 0x2010 ;REG_USER<3>=1 передать управление для дальнейшей обработки команд пользователя MODBUS return ORG 0x2014 ;REG_USER<2>=1 передать управление каждые 1000 мкс return ORG 0x2018 ;точка входа прерывания 100 Гц (REG_USER<1>=1) goto 0x2100 ORG 0x201C ;точка входа вектора «выполнить один раз»(REG_USER<0>=1) goto 0x2040 ORG 0x2040 ;выполнить один раз clrf STEP_1_H ;обнулим старший байт счетчика шагов (первый канал) clrf STEP_1_L ;обнулим младший байт счетчика шагов (первый канал) movlw 0x01 movwf CCL_1 ;состояние управляющих линий в режиме покоя (первый канал) = 01h (управляющее напряжение с обмоток снято - умолчание) clrf CW_1 ;обнулим управляющее слово (первый канал) clrf START_1 ;обнулим стартовый байт первого канала clrf STEP_2_H ;обнулим старший байт счетчика шагов (второй канал) clrf STEP_2_L ;обнулим младший байт счетчика шагов (второй канал) movlw 0x01 movwf CCL_2 ;состояние управляющих линий в режиме покоя (второй канал) = 01h (управляющее напряжение с обмоток снято - умолчание) clrf CW_2 ;обнулим управляющее слово (второй канал) clrf START_2 ;обнулим стартовый байт второго канала clrf START ;обнулим байт общего старта movlw 0x30 ;взведем счетчик прерываний movwf COUNT return ORG 0x2100 tstfsz COUNT decf COUNT ;уменьшим счетчик посещений прерывания для отсчета return ORG 0x2200 tstfsz COUNT ;проверим счетчик - если он обнулился - значит пора действовать (проверять бит старта и т.д.) return movlw 0x030 ;снова взведем счетчик movwf COUNT tstfsz START ;проверим общий стартовый байт goto CHANNEL ;если он не ноль - идем на работу с обоими каналами goto M_1 ;если он ноль - идем на проверку стартового байта первого канала CHANNEL setf START_1 ;если установлен байт "общий старт" - setf START_2 ;установим сьартовые байты для каждого канала clrf START ;и сбросим байт общего старта M_1 tstfsz START_1 ;проверим стартовый байт первого канала goto CHANNEL_1 ;если он не ноль - идем на работу с первым каналом goto M_2 ;если он ноль - идем на проверку стартового байта второго канала CHANNEL_1 movff STEP_1_H,I2C_DATA ;занесем в OUT9 количество шагов первого канала movlw 0x54 ;адрес модуля movwf I2C_SLAD ;к которому подключаемся movlw 0x34 ;занесем Word-адрес устройства в модуле movwf FSR1L movlw 0x02 ;количество передаваемых байт - 2 (сташий и младший байты счетчика шагов первого канала) movwf I2C_N lfsr FSR2,I2C_DATA ;укажем на данные call 0x1E04 ;вызовем подпрограмму I2С_WR/R - записи/чтения ячеек Slave-I2C-устройства movff CCL_1,I2C_DATA ;занесем в OUT9 второе управляющее слово первого канала movlw 0x54 ;адрес модуля movwf I2C_SLAD ;к которому подключаемся movlw 0x39 ;занесем Word-адрес устройства в модуле movwf FSR1L movlw 0x01 ;количество передаваемых байт - 1 movwf I2C_N lfsr FSR2,I2C_DATA ;укажем на данные call 0x1E04 ;вызовем подпрограмму I2С_WR/R - записи/чтения ячеек Slave-I2C-устройства movff CW_1,I2C_DATA ;занесем в OUT9 первое управляющее слово первого канала movlw 0x54 ;адрес модуля movwf I2C_SLAD ;к которому подключаемся movlw 0x38 ;занесем Word-адрес устройства в модуле movwf FSR1L movlw 0x01 ;количество передаваемых байт - 1 movwf I2C_N lfsr FSR2,I2C_DATA ;укажем на данные call 0x1E04 ;вызовем подпрограмму I2С_WR/R - записи/чтения ячеек Slave-I2C-устройства clrf START_1 ;сбросим стартовый бит первого канала M_2 tstfsz START_2 ;проверим стартовый байт первого канала goto CHANNEL_2 ;если он не ноль - идем на работу с первым каналом return ;если он ноль - выходим отсюда - нас здесь больше ничего не задерживает CHANNEL_2 movff STEP_2_H,I2C_DATA ;занесем в OUT9 количество шагов первого канала movlw 0x54 ;адрес модуля movwf I2C_SLAD ;к которому подключаемся movlw 0x36 ;занесем Word-адрес устройства в модуле movwf FSR1L movlw 0x02 ;количество передаваемых байт - 2 (сташий и младший байты счетчика шагов первого канала) movwf I2C_N lfsr FSR2,I2C_DATA ;укажем на данные call 0x1E04 ;вызовем подпрограмму I2С_WR/R - записи/чтения ячеек Slave-I2C-устройства movff CCL_2,I2C_DATA ;занесем в OUT9 второе управляющее слово первого канала movlw 0x54 ;адрес модуля movwf I2C_SLAD ;к которому подключаемся movlw 0x41 ;занесем Word-адрес устройства в модуле movwf FSR1L movlw 0x01 ;количество передаваемых байт - 1 movwf I2C_N lfsr FSR2,I2C_DATA ;укажем на данные call 0x1E04 ;вызовем подпрограмму I2С_WR/R - записи/чтения ячеек Slave-I2C-устройства movff CW_2,I2C_DATA ;занесем в OUT9 первое управляющее слово первого канала movlw 0x54 ;адрес модуля movwf I2C_SLAD ;к которому подключаемся movlw 0x40 ;занесем Word-адрес устройства в модуле movwf FSR1L movlw 0x01 ;количество передаваемых байт - 1 movwf I2C_N lfsr FSR2,I2C_DATA ;укажем на данные call 0x1E04 ;вызовем подпрограмму I2С_WR/R - записи/чтения ячеек Slave-I2C-устройства clrf START_2 ;сбросим стартовый бит первого канала return END |
|
postmaster@fractal.com.ru
Copyright © 1999-2018 ООО "Фрактал"
![]() | ||
148 | ![]() | 1 |